From 85f3a483363176be99c9902cb713861cc5c4a42f Mon Sep 17 00:00:00 2001 From: SpinnerX Date: Tue, 9 Jun 2026 12:32:46 -0700 Subject: [PATCH 1/2] refactor: fix the bit masks for specifying memory type index into memory heaps; updated vulkan-cpp version to 6.2 --- .github/workflows/ci.yml | 6 +- .github/workflows/deploy.yml | 6 +- conanfile.py | 2 +- demos/1-instance/conanfile.py | 2 +- demos/10-textures/conanfile.py | 2 +- demos/11-depth-buffering/conanfile.py | 2 +- demos/12-loading-models/conanfile.py | 2 +- demos/13-skybox/conanfile.py | 2 +- demos/14-imgui/conanfile.py | 2 +- demos/15-dynamic-rendering/conanfile.py | 2 +- demos/16-descriptor-indexing/conanfile.py | 2 +- .../17-buffer-device-address/application.cpp | 2 +- demos/17-buffer-device-address/conanfile.py | 2 +- demos/2-physical-device/conanfile.py | 2 +- demos/3-logical-device/conanfile.py | 2 +- demos/4-surface/conanfile.py | 2 +- demos/5-swapchain/conanfile.py | 2 +- demos/6-graphics-pipeline/conanfile.py | 2 +- demos/7-vertex-buffer/conanfile.py | 2 +- demos/8-index-uniform-buffers/conanfile.py | 2 +- demos/9-uniforms/conanfile.py | 2 +- vulkan-cpp/buffer.cppm | 11 +++- vulkan-cpp/buffer32.cppm | 12 +++- vulkan-cpp/dyn/buffer.cppm | 64 +++++++++++-------- vulkan-cpp/sample_image.cppm | 11 +++- 25 files changed, 91 insertions(+), 57 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5bb7a51..84a017e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,19 +12,19 @@ jobs: uses: engine3d-dev/ci/.github/workflows/windows.yml@main with: package_name: "vulkan-cpp" - version: "6.1" + version: "6.2" secrets: inherit linux: uses: engine3d-dev/ci/.github/workflows/linux.yml@main with: package_name: "vulkan-cpp" - version: "6.1" + version: "6.2" secrets: inherit mac: uses: engine3d-dev/ci/.github/workflows/mac.yml@main with: package_name: "vulkan-cpp" - version: "6.1" + version: "6.2" secrets: inherit \ No newline at end of file diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index c6d392b..e24e7de 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -13,19 +13,19 @@ jobs: uses: engine3d-dev/ci/.github/workflows/deploy_windows.yml@main with: package_name: "vulkan-cpp" - version: "6.1" + version: "6.2" secrets: inherit linux: uses: engine3d-dev/ci/.github/workflows/deploy_linux.yml@main with: package_name: "vulkan-cpp" - version: "6.1" + version: "6.2" secrets: inherit mac: uses: engine3d-dev/ci/.github/workflows/deploy_mac.yml@main with: package_name: "vulkan-cpp" - version: "6.1" + version: "6.2" secrets: inherit \ No newline at end of file diff --git a/conanfile.py b/conanfile.py index 033dec3..285deda 100644 --- a/conanfile.py +++ b/conanfile.py @@ -9,7 +9,7 @@ class VulkanCppRecipe(ConanFile): name = "vulkan-cpp" - version = "6.1" + version = "6.2" license = "Apache-2.0" url = "https://github.com/engine3d-dev/vulkan-cpp" homepage = "https://github.com/engine3d-dev/vulkan-cpp" diff --git a/demos/1-instance/conanfile.py b/demos/1-instance/conanfile.py index b87d0ed..724b58c 100644 --- a/demos/1-instance/conanfile.py +++ b/demos/1-instance/conanfile.py @@ -22,7 +22,7 @@ def requirements(self): self.requires("glm/1.0.1") self.requires("stb/cci.20230920") self.requires("tinyobjloader/2.0.0-rc10") - self.requires("vulkan-cpp/6.1") + self.requires("vulkan-cpp/6.2") def build(self): cmake = CMake(self) diff --git a/demos/10-textures/conanfile.py b/demos/10-textures/conanfile.py index b87d0ed..724b58c 100644 --- a/demos/10-textures/conanfile.py +++ b/demos/10-textures/conanfile.py @@ -22,7 +22,7 @@ def requirements(self): self.requires("glm/1.0.1") self.requires("stb/cci.20230920") self.requires("tinyobjloader/2.0.0-rc10") - self.requires("vulkan-cpp/6.1") + self.requires("vulkan-cpp/6.2") def build(self): cmake = CMake(self) diff --git a/demos/11-depth-buffering/conanfile.py b/demos/11-depth-buffering/conanfile.py index b87d0ed..724b58c 100644 --- a/demos/11-depth-buffering/conanfile.py +++ b/demos/11-depth-buffering/conanfile.py @@ -22,7 +22,7 @@ def requirements(self): self.requires("glm/1.0.1") self.requires("stb/cci.20230920") self.requires("tinyobjloader/2.0.0-rc10") - self.requires("vulkan-cpp/6.1") + self.requires("vulkan-cpp/6.2") def build(self): cmake = CMake(self) diff --git a/demos/12-loading-models/conanfile.py b/demos/12-loading-models/conanfile.py index b87d0ed..724b58c 100644 --- a/demos/12-loading-models/conanfile.py +++ b/demos/12-loading-models/conanfile.py @@ -22,7 +22,7 @@ def requirements(self): self.requires("glm/1.0.1") self.requires("stb/cci.20230920") self.requires("tinyobjloader/2.0.0-rc10") - self.requires("vulkan-cpp/6.1") + self.requires("vulkan-cpp/6.2") def build(self): cmake = CMake(self) diff --git a/demos/13-skybox/conanfile.py b/demos/13-skybox/conanfile.py index b87d0ed..724b58c 100644 --- a/demos/13-skybox/conanfile.py +++ b/demos/13-skybox/conanfile.py @@ -22,7 +22,7 @@ def requirements(self): self.requires("glm/1.0.1") self.requires("stb/cci.20230920") self.requires("tinyobjloader/2.0.0-rc10") - self.requires("vulkan-cpp/6.1") + self.requires("vulkan-cpp/6.2") def build(self): cmake = CMake(self) diff --git a/demos/14-imgui/conanfile.py b/demos/14-imgui/conanfile.py index b87d0ed..724b58c 100644 --- a/demos/14-imgui/conanfile.py +++ b/demos/14-imgui/conanfile.py @@ -22,7 +22,7 @@ def requirements(self): self.requires("glm/1.0.1") self.requires("stb/cci.20230920") self.requires("tinyobjloader/2.0.0-rc10") - self.requires("vulkan-cpp/6.1") + self.requires("vulkan-cpp/6.2") def build(self): cmake = CMake(self) diff --git a/demos/15-dynamic-rendering/conanfile.py b/demos/15-dynamic-rendering/conanfile.py index b87d0ed..724b58c 100644 --- a/demos/15-dynamic-rendering/conanfile.py +++ b/demos/15-dynamic-rendering/conanfile.py @@ -22,7 +22,7 @@ def requirements(self): self.requires("glm/1.0.1") self.requires("stb/cci.20230920") self.requires("tinyobjloader/2.0.0-rc10") - self.requires("vulkan-cpp/6.1") + self.requires("vulkan-cpp/6.2") def build(self): cmake = CMake(self) diff --git a/demos/16-descriptor-indexing/conanfile.py b/demos/16-descriptor-indexing/conanfile.py index b87d0ed..724b58c 100644 --- a/demos/16-descriptor-indexing/conanfile.py +++ b/demos/16-descriptor-indexing/conanfile.py @@ -22,7 +22,7 @@ def requirements(self): self.requires("glm/1.0.1") self.requires("stb/cci.20230920") self.requires("tinyobjloader/2.0.0-rc10") - self.requires("vulkan-cpp/6.1") + self.requires("vulkan-cpp/6.2") def build(self): cmake = CMake(self) diff --git a/demos/17-buffer-device-address/application.cpp b/demos/17-buffer-device-address/application.cpp index 0e57d07..d6cddbf 100644 --- a/demos/17-buffer-device-address/application.cpp +++ b/demos/17-buffer-device-address/application.cpp @@ -377,7 +377,7 @@ main() { // setting up physical device std::expected physical_device_expected = - api_instance.enumerate_physical_device(vk::physical_gpu::integrated); + api_instance.enumerate_physical_device(vk::physical_gpu::discrete); vk::physical_device physical_device = physical_device_expected.value(); // setting up logical device diff --git a/demos/17-buffer-device-address/conanfile.py b/demos/17-buffer-device-address/conanfile.py index da977e8..06fc16a 100644 --- a/demos/17-buffer-device-address/conanfile.py +++ b/demos/17-buffer-device-address/conanfile.py @@ -20,7 +20,7 @@ def requirements(self): self.requires("glm/1.0.1") self.requires("stb/cci.20230920") self.requires("tinyobjloader/2.0.0-rc10") - self.requires("vulkan-cpp/6.1") + self.requires("vulkan-cpp/6.2") def build(self): cmake = CMake(self) diff --git a/demos/2-physical-device/conanfile.py b/demos/2-physical-device/conanfile.py index b87d0ed..724b58c 100644 --- a/demos/2-physical-device/conanfile.py +++ b/demos/2-physical-device/conanfile.py @@ -22,7 +22,7 @@ def requirements(self): self.requires("glm/1.0.1") self.requires("stb/cci.20230920") self.requires("tinyobjloader/2.0.0-rc10") - self.requires("vulkan-cpp/6.1") + self.requires("vulkan-cpp/6.2") def build(self): cmake = CMake(self) diff --git a/demos/3-logical-device/conanfile.py b/demos/3-logical-device/conanfile.py index b87d0ed..724b58c 100644 --- a/demos/3-logical-device/conanfile.py +++ b/demos/3-logical-device/conanfile.py @@ -22,7 +22,7 @@ def requirements(self): self.requires("glm/1.0.1") self.requires("stb/cci.20230920") self.requires("tinyobjloader/2.0.0-rc10") - self.requires("vulkan-cpp/6.1") + self.requires("vulkan-cpp/6.2") def build(self): cmake = CMake(self) diff --git a/demos/4-surface/conanfile.py b/demos/4-surface/conanfile.py index b87d0ed..724b58c 100644 --- a/demos/4-surface/conanfile.py +++ b/demos/4-surface/conanfile.py @@ -22,7 +22,7 @@ def requirements(self): self.requires("glm/1.0.1") self.requires("stb/cci.20230920") self.requires("tinyobjloader/2.0.0-rc10") - self.requires("vulkan-cpp/6.1") + self.requires("vulkan-cpp/6.2") def build(self): cmake = CMake(self) diff --git a/demos/5-swapchain/conanfile.py b/demos/5-swapchain/conanfile.py index b87d0ed..724b58c 100644 --- a/demos/5-swapchain/conanfile.py +++ b/demos/5-swapchain/conanfile.py @@ -22,7 +22,7 @@ def requirements(self): self.requires("glm/1.0.1") self.requires("stb/cci.20230920") self.requires("tinyobjloader/2.0.0-rc10") - self.requires("vulkan-cpp/6.1") + self.requires("vulkan-cpp/6.2") def build(self): cmake = CMake(self) diff --git a/demos/6-graphics-pipeline/conanfile.py b/demos/6-graphics-pipeline/conanfile.py index b87d0ed..724b58c 100644 --- a/demos/6-graphics-pipeline/conanfile.py +++ b/demos/6-graphics-pipeline/conanfile.py @@ -22,7 +22,7 @@ def requirements(self): self.requires("glm/1.0.1") self.requires("stb/cci.20230920") self.requires("tinyobjloader/2.0.0-rc10") - self.requires("vulkan-cpp/6.1") + self.requires("vulkan-cpp/6.2") def build(self): cmake = CMake(self) diff --git a/demos/7-vertex-buffer/conanfile.py b/demos/7-vertex-buffer/conanfile.py index b87d0ed..724b58c 100644 --- a/demos/7-vertex-buffer/conanfile.py +++ b/demos/7-vertex-buffer/conanfile.py @@ -22,7 +22,7 @@ def requirements(self): self.requires("glm/1.0.1") self.requires("stb/cci.20230920") self.requires("tinyobjloader/2.0.0-rc10") - self.requires("vulkan-cpp/6.1") + self.requires("vulkan-cpp/6.2") def build(self): cmake = CMake(self) diff --git a/demos/8-index-uniform-buffers/conanfile.py b/demos/8-index-uniform-buffers/conanfile.py index b87d0ed..724b58c 100644 --- a/demos/8-index-uniform-buffers/conanfile.py +++ b/demos/8-index-uniform-buffers/conanfile.py @@ -22,7 +22,7 @@ def requirements(self): self.requires("glm/1.0.1") self.requires("stb/cci.20230920") self.requires("tinyobjloader/2.0.0-rc10") - self.requires("vulkan-cpp/6.1") + self.requires("vulkan-cpp/6.2") def build(self): cmake = CMake(self) diff --git a/demos/9-uniforms/conanfile.py b/demos/9-uniforms/conanfile.py index b87d0ed..724b58c 100644 --- a/demos/9-uniforms/conanfile.py +++ b/demos/9-uniforms/conanfile.py @@ -22,7 +22,7 @@ def requirements(self): self.requires("glm/1.0.1") self.requires("stb/cci.20230920") self.requires("tinyobjloader/2.0.0-rc10") - self.requires("vulkan-cpp/6.1") + self.requires("vulkan-cpp/6.2") def build(self): cmake = CMake(self) diff --git a/vulkan-cpp/buffer.cppm b/vulkan-cpp/buffer.cppm index 8ac0ce2..207d719 100644 --- a/vulkan-cpp/buffer.cppm +++ b/vulkan-cpp/buffer.cppm @@ -4,6 +4,7 @@ module; #include #include #include +#include export module vk:buffer; @@ -63,8 +64,14 @@ export namespace vk { m_device, m_handle, &memory_requirements); uint32_t mapped_memory_requirements = memory_requirements.memoryTypeBits & p_params.memory_mask; - uint32_t memory_index = - std::countr_zero(mapped_memory_requirements); + uint32_t memory_index = std::numeric_limits::max(); + if (mapped_memory_requirements != 0) { + memory_index = std::countr_zero(mapped_memory_requirements); + } + else { + memory_index = + std::countr_zero(memory_requirements.memoryTypeBits); + } VkMemoryAllocateInfo memory_alloc_info = { .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, diff --git a/vulkan-cpp/buffer32.cppm b/vulkan-cpp/buffer32.cppm index 84cb879..1212944 100644 --- a/vulkan-cpp/buffer32.cppm +++ b/vulkan-cpp/buffer32.cppm @@ -5,6 +5,7 @@ module; #include #include #include +#include export module vk:buffer32; @@ -50,8 +51,15 @@ export namespace vk { m_device, m_handle, &memory_requirements); uint32_t mapped_memory_requirements = memory_requirements.memoryTypeBits & p_params.memory_mask; - uint32_t memory_index = - std::countr_zero(mapped_memory_requirements); + + uint32_t memory_index = std::numeric_limits::max(); + if (mapped_memory_requirements != 0) { + memory_index = std::countr_zero(mapped_memory_requirements); + } + else { + memory_index = + std::countr_zero(memory_requirements.memoryTypeBits); + } VkMemoryAllocateInfo memory_alloc_info = { .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, diff --git a/vulkan-cpp/dyn/buffer.cppm b/vulkan-cpp/dyn/buffer.cppm index ffe30d8..30d07ad 100644 --- a/vulkan-cpp/dyn/buffer.cppm +++ b/vulkan-cpp/dyn/buffer.cppm @@ -1,9 +1,10 @@ module; -#include -#include -#include #include +#include +#include +#include +#include export module vk:buffer_device_address; @@ -56,8 +57,15 @@ export namespace vk::dyn { m_device, m_handle, &memory_requirements); uint32_t mapped_memory_requirements = memory_requirements.memoryTypeBits & p_params.memory_mask; - uint32_t memory_index = - std::countr_zero(mapped_memory_requirements); + + uint32_t memory_index = std::numeric_limits::max(); + if (mapped_memory_requirements != 0) { + memory_index = std::countr_zero(mapped_memory_requirements); + } + else { + memory_index = + std::countr_zero(memory_requirements.memoryTypeBits); + } // Required to be set for buffer device addresses VkMemoryAllocateInfo memory_alloc_info = { @@ -83,26 +91,30 @@ export namespace vk::dyn { for (uint32_t i = 0; i < image_copies.size(); i++) { const buffer_image_copy image_copy = p_copies[i]; image_copies[i] = { - .bufferOffset = image_copy.offset, - .bufferRowLength = image_copy.row_length, - .bufferImageHeight = image_copy.image_height, - .imageSubresource = { - .aspectMask = static_cast(image_copy.aspect_mask), - .mipLevel = image_copy.mip_level, - .baseArrayLayer = image_copy.base_array_layer, - .layerCount = image_copy.layer_count, - }, - .imageOffset = { - static_cast(image_copy.image_offset.width), - static_cast(image_copy.image_offset.height), - static_cast(image_copy.image_offset.depth), - }, - .imageExtent = { - image_copy.image_extent.width, - image_copy.image_extent.height, - image_copy.image_extent.depth, - }, - }; + .bufferOffset = image_copy.offset, + .bufferRowLength = image_copy.row_length, + .bufferImageHeight = image_copy.image_height, + .imageSubresource = + { + .aspectMask = + static_cast(image_copy.aspect_mask), + .mipLevel = image_copy.mip_level, + .baseArrayLayer = image_copy.base_array_layer, + .layerCount = image_copy.layer_count, + }, + .imageOffset = + { + static_cast(image_copy.image_offset.width), + static_cast(image_copy.image_offset.height), + static_cast(image_copy.image_offset.depth), + }, + .imageExtent = + { + image_copy.image_extent.width, + image_copy.image_extent.height, + image_copy.image_extent.depth, + }, + }; } vkCmdCopyBufferToImage(p_command, @@ -171,4 +183,4 @@ export namespace vk::dyn { VkBuffer m_handle = nullptr; VkDeviceMemory m_device_memory; }; -}; \ No newline at end of file +}; // namespace vk::dyn \ No newline at end of file diff --git a/vulkan-cpp/sample_image.cppm b/vulkan-cpp/sample_image.cppm index 7671d9d..9281640 100644 --- a/vulkan-cpp/sample_image.cppm +++ b/vulkan-cpp/sample_image.cppm @@ -4,6 +4,7 @@ module; #include #include #include +#include export module vk:sample_image; @@ -78,8 +79,14 @@ export namespace vk { p_image_params.memory_mask; // Retrieving the next available bits that have been mapped - uint32_t memory_index = - std::countr_zero(mapped_memory_requirements); + uint32_t memory_index = std::numeric_limits::max(); + if (mapped_memory_requirements != 0) { + memory_index = std::countr_zero(mapped_memory_requirements); + } + else { + memory_index = + std::countr_zero(memory_requirements.memoryTypeBits); + } // 4. Allocate info VkMemoryAllocateInfo memory_alloc_info = { From 1a7ceff114eff649b15856067865a4725e9f9b83 Mon Sep 17 00:00:00 2001 From: SpinnerX Date: Tue, 9 Jun 2026 12:33:45 -0700 Subject: [PATCH 2/2] made some minor code formatting --- vulkan-cpp/buffer.cppm | 4 ++-- vulkan-cpp/buffer32.cppm | 2 +- vulkan-cpp/sample_image.cppm | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/vulkan-cpp/buffer.cppm b/vulkan-cpp/buffer.cppm index 207d719..e20c305 100644 --- a/vulkan-cpp/buffer.cppm +++ b/vulkan-cpp/buffer.cppm @@ -64,13 +64,13 @@ export namespace vk { m_device, m_handle, &memory_requirements); uint32_t mapped_memory_requirements = memory_requirements.memoryTypeBits & p_params.memory_mask; - uint32_t memory_index = std::numeric_limits::max(); + uint32_t memory_index = std::numeric_limits::max(); if (mapped_memory_requirements != 0) { memory_index = std::countr_zero(mapped_memory_requirements); } else { memory_index = - std::countr_zero(memory_requirements.memoryTypeBits); + std::countr_zero(memory_requirements.memoryTypeBits); } VkMemoryAllocateInfo memory_alloc_info = { diff --git a/vulkan-cpp/buffer32.cppm b/vulkan-cpp/buffer32.cppm index 1212944..fbe5dbf 100644 --- a/vulkan-cpp/buffer32.cppm +++ b/vulkan-cpp/buffer32.cppm @@ -58,7 +58,7 @@ export namespace vk { } else { memory_index = - std::countr_zero(memory_requirements.memoryTypeBits); + std::countr_zero(memory_requirements.memoryTypeBits); } VkMemoryAllocateInfo memory_alloc_info = { diff --git a/vulkan-cpp/sample_image.cppm b/vulkan-cpp/sample_image.cppm index 9281640..ec5231c 100644 --- a/vulkan-cpp/sample_image.cppm +++ b/vulkan-cpp/sample_image.cppm @@ -85,7 +85,7 @@ export namespace vk { } else { memory_index = - std::countr_zero(memory_requirements.memoryTypeBits); + std::countr_zero(memory_requirements.memoryTypeBits); } // 4. Allocate info