From 81e440a97fa4ca8610ced2a8d4d4b293ab3a6173 Mon Sep 17 00:00:00 2001 From: Przemek Date: Thu, 27 Feb 2025 12:19:19 +0100 Subject: [PATCH 01/83] Update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index e2e8ed0874..8058cff295 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit e2e8ed0874f94fdb2850ec7756b5976d6a284cc8 +Subproject commit 8058cff295589b358eba291ed22804601cc6c7bf From be37c6af3a9c74ff8b56ef02341fe7342734dcb8 Mon Sep 17 00:00:00 2001 From: Przemek Date: Thu, 20 Mar 2025 12:38:09 +0100 Subject: [PATCH 02/83] Updated examples --- examples_tests | 2 +- src/nbl/video/CVulkanPhysicalDevice.cpp | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/examples_tests b/examples_tests index 8058cff295..a215f450b8 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 8058cff295589b358eba291ed22804601cc6c7bf +Subproject commit a215f450b8432c27c5ed0a352185e22b34aa2794 diff --git a/src/nbl/video/CVulkanPhysicalDevice.cpp b/src/nbl/video/CVulkanPhysicalDevice.cpp index fc45b987bd..e7586c5b4c 100644 --- a/src/nbl/video/CVulkanPhysicalDevice.cpp +++ b/src/nbl/video/CVulkanPhysicalDevice.cpp @@ -1564,7 +1564,8 @@ core::smart_refctd_ptr CVulkanPhysicalDevice::createLogicalDevic enableExtensionIfAvailable(VK_KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME); - enableExtensionIfAvailable(VK_KHR_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME); + VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR fragmentShaderBarycentricFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR, nullptr}; + enableExtensionIfAvailable(VK_KHR_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME,&fragmentShaderBarycentricFeatures); VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR subgroupUniformControlFlowFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR,nullptr }; enableExtensionIfAvailable(VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_EXTENSION_NAME,&subgroupUniformControlFlowFeatures); From c9e0926263925d1e3d8dfb38b2919d046a52c412 Mon Sep 17 00:00:00 2001 From: Przemek Date: Wed, 26 Mar 2025 11:18:54 +0100 Subject: [PATCH 03/83] Implemented height shading --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index a215f450b8..8900f9cf5b 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit a215f450b8432c27c5ed0a352185e22b34aa2794 +Subproject commit 8900f9cf5b2f4c8d424aabbaf5237a371957e21f From 896d0c4edd87e4b4d75f4a4f207557913c8a558c Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Sun, 30 Mar 2025 08:20:32 +0330 Subject: [PATCH 04/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 8900f9cf5b..10791e9f48 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 8900f9cf5b2f4c8d424aabbaf5237a371957e21f +Subproject commit 10791e9f48d5563b319b58a7ea47dbd19639abe2 From 25eceed8a5afaafb87c9dc0746bd18b3010b12b4 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Thu, 10 Apr 2025 06:01:01 +0330 Subject: [PATCH 05/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 10791e9f48..06f72c50cd 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 10791e9f48d5563b319b58a7ea47dbd19639abe2 +Subproject commit 06f72c50cd2b575741faa61ad9624f688817f41c From df77044327ff3add0d475173a911b1a437a815d7 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Thu, 10 Apr 2025 08:44:34 +0330 Subject: [PATCH 06/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 06f72c50cd..e4e7f1ec84 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 06f72c50cd2b575741faa61ad9624f688817f41c +Subproject commit e4e7f1ec8476ff7d8c3f9bf71002c40c9585b81d From a327c2986c3775f8352117136367d4c23f69cdf2 Mon Sep 17 00:00:00 2001 From: Przemek Date: Sat, 12 Apr 2025 12:42:52 +0200 Subject: [PATCH 07/83] Updated examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index e4e7f1ec84..fd4e576665 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit e4e7f1ec8476ff7d8c3f9bf71002c40c9585b81d +Subproject commit fd4e576665b228ede3acd28fc32119cc42d8cf5e From 3bf7c616c56898166ae498bd7e5eee8ad2b968ee Mon Sep 17 00:00:00 2001 From: Przemek Date: Mon, 14 Apr 2025 12:55:13 +0200 Subject: [PATCH 08/83] Updated examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index fd4e576665..6c907e49bc 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit fd4e576665b228ede3acd28fc32119cc42d8cf5e +Subproject commit 6c907e49bce8d7bde928af6b521fa2d7cc280584 From a77ca954ca3b68946312153e0808f260d50bc829 Mon Sep 17 00:00:00 2001 From: Przemek Date: Mon, 14 Apr 2025 16:01:23 +0200 Subject: [PATCH 09/83] Updated_examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 6c907e49bc..f173c71866 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 6c907e49bce8d7bde928af6b521fa2d7cc280584 +Subproject commit f173c71866259189779de0edc8bb209717bbf7b2 From 4ed3af9b2786b246ab22b76c49513201dd0cdbb1 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Tue, 15 Apr 2025 12:52:24 +0330 Subject: [PATCH 10/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index f173c71866..1db627c52e 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit f173c71866259189779de0edc8bb209717bbf7b2 +Subproject commit 1db627c52e32644bdf276bfcdec4afbf92cf16c8 From 631c63eb8dcf25a48111297dca84cf3b934059bd Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Tue, 15 Apr 2025 12:55:54 +0330 Subject: [PATCH 11/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 1db627c52e..432b931caa 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 1db627c52e32644bdf276bfcdec4afbf92cf16c8 +Subproject commit 432b931caa1192bf6982178af4a0c9686d7222ba From f85956dc6ca5c70a221c2c1e59b84a2488c58d67 Mon Sep 17 00:00:00 2001 From: Przemek Date: Tue, 15 Apr 2025 13:04:50 +0200 Subject: [PATCH 12/83] Updated examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 432b931caa..88dcf44da0 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 432b931caa1192bf6982178af4a0c9686d7222ba +Subproject commit 88dcf44da0465b3e04a7255ba26a67fa342b5552 From 24561277adc1719ef89db960f251d43eedb7dce1 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Tue, 15 Apr 2025 14:44:17 +0330 Subject: [PATCH 13/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 88dcf44da0..906443947f 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 88dcf44da0465b3e04a7255ba26a67fa342b5552 +Subproject commit 906443947fb830c1d1d75ed48f3d47e97b6b335c From 7674e432175e731c7d021b5a4ab5eee2395c8c95 Mon Sep 17 00:00:00 2001 From: Przemek Date: Sat, 19 Apr 2025 16:39:24 +0200 Subject: [PATCH 14/83] Updated examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 906443947f..c8653573a6 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 906443947fb830c1d1d75ed48f3d47e97b6b335c +Subproject commit c8653573a6b93a3962de2f0b5662cb630e9ee51b From 603004511ee68529e0fbc98ffed8fcdf505c9f58 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Mon, 21 Apr 2025 14:41:34 +0330 Subject: [PATCH 15/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index c8653573a6..95ed1adb21 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit c8653573a6b93a3962de2f0b5662cb630e9ee51b +Subproject commit 95ed1adb218dfc3159ace39ff69a852e81913cda From f9978949bb8c0cab5c8c68b1c3bf4c3dcd470b78 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Mon, 21 Apr 2025 16:09:01 +0330 Subject: [PATCH 16/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 95ed1adb21..b36e702ed6 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 95ed1adb218dfc3159ace39ff69a852e81913cda +Subproject commit b36e702ed6f9e57e966e450b5d3bbb7e8681165d From 38d5ee2d8bd0b0179507290af19777d050a3114a Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Tue, 22 Apr 2025 08:58:49 +0330 Subject: [PATCH 17/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index b36e702ed6..2462d0adfa 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit b36e702ed6f9e57e966e450b5d3bbb7e8681165d +Subproject commit 2462d0adfa9a49e30dacbb0d25c3bd1acc47a62f From ca49224901976c6d24a4b745f0ee8e5e100af285 Mon Sep 17 00:00:00 2001 From: Przemek Date: Tue, 22 Apr 2025 11:07:42 +0200 Subject: [PATCH 18/83] Updated examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 2462d0adfa..287688e18f 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 2462d0adfa9a49e30dacbb0d25c3bd1acc47a62f +Subproject commit 287688e18f75aa1a24c054691e5e0e197c9f751f From ab57b02755f07361f4c26318536cbbe6ac80433d Mon Sep 17 00:00:00 2001 From: Przemek Date: Tue, 22 Apr 2025 21:05:55 +0200 Subject: [PATCH 19/83] Updated examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 4346a6024c..daa51f68fc 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 4346a6024cdd1910062c7001d1e17be3a54eb061 +Subproject commit daa51f68fc040b8927a9c5d1e0bd8e6dc4e3cac1 From 38baf9f2a3f90b720f29b404c7af88992b0189aa Mon Sep 17 00:00:00 2001 From: Przemek Date: Wed, 23 Apr 2025 11:04:28 +0200 Subject: [PATCH 20/83] Updated examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index daa51f68fc..8a771a6400 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit daa51f68fc040b8927a9c5d1e0bd8e6dc4e3cac1 +Subproject commit 8a771a64002c6f2e2b3af035227ed18fe3947477 From f810b5d46d1bb9191132778e7be7aad1b574758b Mon Sep 17 00:00:00 2001 From: Przemek Date: Thu, 24 Apr 2025 14:06:20 +0200 Subject: [PATCH 21/83] Updated examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 8a771a6400..fa5d7f1e2e 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 8a771a64002c6f2e2b3af035227ed18fe3947477 +Subproject commit fa5d7f1e2ea73767e36319d4e40d704855ceb16d From e19e644060719dc26985a370ffd483c973b1f18f Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Fri, 25 Apr 2025 12:09:07 +0330 Subject: [PATCH 22/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index fa5d7f1e2e..9ddaa810cf 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit fa5d7f1e2ea73767e36319d4e40d704855ceb16d +Subproject commit 9ddaa810cf0bfc19130f66de25f43b1be3ad8092 From 5c27651b9b1d419b346a35f614cf1dbc74ddb8e0 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Thu, 1 May 2025 14:09:09 +0400 Subject: [PATCH 23/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 9ddaa810cf..496cec4e8a 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 9ddaa810cf0bfc19130f66de25f43b1be3ad8092 +Subproject commit 496cec4e8aff7d2e6e101b56b496b9ae19d8bfb1 From 6d2011f1ec8694b93f8d0518795e5dbd3ff91130 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Fri, 2 May 2025 11:20:11 +0400 Subject: [PATCH 24/83] update examples tests --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 496cec4e8a..7381460e1c 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 496cec4e8aff7d2e6e101b56b496b9ae19d8bfb1 +Subproject commit 7381460e1c9a5b0bc1a8f319c0f81b0d577e97d8 From 0d6542a07b1d55275fa1338c87c6998f9481793c Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Fri, 2 May 2025 13:04:31 +0400 Subject: [PATCH 25/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 7381460e1c..1db6e0461f 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 7381460e1c9a5b0bc1a8f319c0f81b0d577e97d8 +Subproject commit 1db6e0461f06c9316ae4181d25e9e42e97c34707 From 095eda5f386d25aab04faa289c4fa2e8d9cab497 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Fri, 2 May 2025 13:07:26 +0400 Subject: [PATCH 26/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 1db6e0461f..7521f571d8 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 1db6e0461f06c9316ae4181d25e9e42e97c34707 +Subproject commit 7521f571d80aee25bb88f6ee30e416e709f60d74 From 93297f2e906f9f63303b42cfac1952ddfb650830 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Sat, 3 May 2025 10:45:08 +0400 Subject: [PATCH 27/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 7521f571d8..7ab6f5d7fb 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 7521f571d80aee25bb88f6ee30e416e709f60d74 +Subproject commit 7ab6f5d7fbe22841da07b3fcf03a235e5b04e1e3 From 219b3b060ca5ea34cee8f64b13d985ab5c52728b Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Sun, 4 May 2025 17:42:55 +0400 Subject: [PATCH 28/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 7ab6f5d7fb..f88f6b6a07 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 7ab6f5d7fbe22841da07b3fcf03a235e5b04e1e3 +Subproject commit f88f6b6a0710c052bac6b1d5bedbd2af9842af53 From 3540cc9d8c52110a2069bee5a7ee75b5288777fb Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Mon, 5 May 2025 15:09:54 +0400 Subject: [PATCH 29/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index f88f6b6a07..4ec49382be 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit f88f6b6a0710c052bac6b1d5bedbd2af9842af53 +Subproject commit 4ec49382bee48a8cf5b1d5f5916a40c350c354e3 From 02488dfa9aa049666a097a09c3c2812a2c9b44a8 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Mon, 5 May 2025 17:06:31 +0400 Subject: [PATCH 30/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 4ec49382be..8677f1fc20 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 4ec49382bee48a8cf5b1d5f5916a40c350c354e3 +Subproject commit 8677f1fc20c10a41603f75a445a9901132e54321 From 8c935783422346a459062d5689764cc2e4fb1e87 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Mon, 12 May 2025 08:38:30 +0400 Subject: [PATCH 31/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 8677f1fc20..48b3125a32 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 8677f1fc20c10a41603f75a445a9901132e54321 +Subproject commit 48b3125a32c722ef46a8fae79aa985670b07f12a From 7e428bd2aacb6e50f9a5ddf78ee449fb8bb786f2 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Tue, 13 May 2025 10:59:34 +0400 Subject: [PATCH 32/83] LRUCache new functionalities --- include/nbl/core/containers/LRUCache.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/include/nbl/core/containers/LRUCache.h b/include/nbl/core/containers/LRUCache.h index 25554d60b2..3505df8c70 100644 --- a/include/nbl/core/containers/LRUCache.h +++ b/include/nbl/core/containers/LRUCache.h @@ -400,6 +400,19 @@ class ResizableLRUCache : protected impl::LRUCacheBase 0) + return &base_t::m_list.getBack()->data.first; + else + return nullptr; + } + + inline size_t size() const { return m_shortcut_map.size(); } + + inline bool empty() const { return size() > 0ull; } /** * @brief Resizes the cache by extending its capacity so it can hold more elements. Returns a bool indicating if capacity was indeed increased. From 460475b60a29510e8847bbcf53228fc6f99c693a Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Tue, 13 May 2025 11:01:31 +0400 Subject: [PATCH 33/83] small dumb fix --- include/nbl/core/containers/LRUCache.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/nbl/core/containers/LRUCache.h b/include/nbl/core/containers/LRUCache.h index 3505df8c70..fb36401288 100644 --- a/include/nbl/core/containers/LRUCache.h +++ b/include/nbl/core/containers/LRUCache.h @@ -412,7 +412,7 @@ class ResizableLRUCache : protected impl::LRUCacheBase 0ull; } + inline bool empty() const { return size() <= 0ull; } /** * @brief Resizes the cache by extending its capacity so it can hold more elements. Returns a bool indicating if capacity was indeed increased. From 0f3f2076a0d1471ab48ad84030d46cc517162008 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Tue, 13 May 2025 15:52:25 +0400 Subject: [PATCH 34/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 48b3125a32..daf6810283 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 48b3125a32c722ef46a8fae79aa985670b07f12a +Subproject commit daf68102835a819250e907079106d366fd4cd47f From 6efb44c6b5390746eb1a2d22e16bf6ffe51c4f74 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Wed, 14 May 2025 14:06:08 +0400 Subject: [PATCH 35/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index daf6810283..ce29c74f52 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit daf68102835a819250e907079106d366fd4cd47f +Subproject commit ce29c74f5258851d5cafa105758c45b07ed8f516 From ddba6e460c8b666f670a74598ead46549f9566d0 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Wed, 14 May 2025 17:57:34 +0400 Subject: [PATCH 36/83] fix suballocated descriptorset destructor and cull_frees --- include/nbl/video/alloc/SubAllocatedDescriptorSet.h | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/include/nbl/video/alloc/SubAllocatedDescriptorSet.h b/include/nbl/video/alloc/SubAllocatedDescriptorSet.h index b5826478f8..9d2e7765f4 100644 --- a/include/nbl/video/alloc/SubAllocatedDescriptorSet.h +++ b/include/nbl/video/alloc/SubAllocatedDescriptorSet.h @@ -209,9 +209,9 @@ class SubAllocatedDescriptorSet : public core::IReferenceCounted remainingFrees = cull_frees(); } while (remainingFrees > 0); - for (uint32_t i = 0; i < m_allocatableRanges.size(); i++) + for (auto& it : m_allocatableRanges) { - auto& range = m_allocatableRanges[i]; + auto& range = it.second; if (range.reservedSize == 0) continue; assert(range.eventHandler->getTimelines().size() == 0); @@ -376,10 +376,9 @@ class SubAllocatedDescriptorSet : public core::IReferenceCounted uint32_t frees = 0; core::vector nulls(m_totalDeferredFrees); auto outNulls = nulls.data(); - for (uint32_t i = 0; i < m_allocatableRanges.size(); i++) + for (auto& it : m_allocatableRanges) { - auto& it = m_allocatableRanges[i]; - frees += it.eventHandler->poll(outNulls).eventsLeft; + frees += it.second.eventHandler->poll(outNulls).eventsLeft; } getDevice()->nullifyDescriptors({nulls.data(),outNulls}); return frees; From d418ad576f44e7d53c55e9213edf93b2352f9ee6 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Wed, 14 May 2025 18:08:14 +0400 Subject: [PATCH 37/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index ce29c74f52..bd9ee8e18c 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit ce29c74f5258851d5cafa105758c45b07ed8f516 +Subproject commit bd9ee8e18c28e5fc444b732e59e8c68a8f2c97db From 4a3720e5e8282b14e54c9377a2c62409fa5a4978 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Wed, 14 May 2025 18:32:39 +0400 Subject: [PATCH 38/83] update example --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index bd9ee8e18c..fcff2ac68e 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit bd9ee8e18c28e5fc444b732e59e8c68a8f2c97db +Subproject commit fcff2ac68ea5dafcff8873bd379bd691c003bd59 From c4bc0c1d9e73bb4a1a4871e418723789ed11fe74 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Thu, 15 May 2025 06:45:26 +0400 Subject: [PATCH 39/83] Fix IGPUDescriptorSet holding on to descriptors ref at correct arrayElement --- src/nbl/video/IGPUDescriptorSet.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nbl/video/IGPUDescriptorSet.cpp b/src/nbl/video/IGPUDescriptorSet.cpp index 350e810bb0..692b4b5819 100644 --- a/src/nbl/video/IGPUDescriptorSet.cpp +++ b/src/nbl/video/IGPUDescriptorSet.cpp @@ -174,7 +174,7 @@ void IGPUDescriptorSet::processWrite(const IGPUDescriptorSet::SWriteDescriptorSe for (auto j = 0; j < write.count; ++j) { - descriptors[j] = write.info[j].desc; + descriptors[j + write.arrayElement] = write.info[j].desc; if (mutableSamplers) mutableSamplers[j] = write.info[j].info.combinedImageSampler.sampler; From 08ff1dfaafb55ccee1fe7276ebd7eb6ab65beff6 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Thu, 15 May 2025 12:13:59 +0400 Subject: [PATCH 40/83] Fix IGPUDescriptorSet holding on to mutableSamplers --- src/nbl/video/IGPUDescriptorSet.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nbl/video/IGPUDescriptorSet.cpp b/src/nbl/video/IGPUDescriptorSet.cpp index 692b4b5819..0d0e87e338 100644 --- a/src/nbl/video/IGPUDescriptorSet.cpp +++ b/src/nbl/video/IGPUDescriptorSet.cpp @@ -177,7 +177,7 @@ void IGPUDescriptorSet::processWrite(const IGPUDescriptorSet::SWriteDescriptorSe descriptors[j + write.arrayElement] = write.info[j].desc; if (mutableSamplers) - mutableSamplers[j] = write.info[j].info.combinedImageSampler.sampler; + mutableSamplers[j + write.arrayElement] = write.info[j].info.combinedImageSampler.sampler; } auto& bindingRedirect = m_layout->getDescriptorRedirect(validationResult.type); auto bindingCreateFlags = bindingRedirect.getCreateFlags(validationResult.descriptorRedirectBindingIndex); From 2cf7ec80c8075d87e764cf622f6348c416e2ef48 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Thu, 15 May 2025 12:14:20 +0400 Subject: [PATCH 41/83] SubAllocatedDescriptorSet to hold onto additional refcounted objects --- .../video/alloc/SubAllocatedDescriptorSet.h | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/include/nbl/video/alloc/SubAllocatedDescriptorSet.h b/include/nbl/video/alloc/SubAllocatedDescriptorSet.h index 9d2e7765f4..3b0c9989e5 100644 --- a/include/nbl/video/alloc/SubAllocatedDescriptorSet.h +++ b/include/nbl/video/alloc/SubAllocatedDescriptorSet.h @@ -28,11 +28,18 @@ class SubAllocatedDescriptorSet : public core::IReferenceCounted class DeferredFreeFunctor { public: - inline DeferredFreeFunctor(SubAllocatedDescriptorSet* composed, uint32_t binding, size_type count, const value_type* addresses) - : m_addresses(std::move(core::make_refctd_dynamic_array>(count))), - m_binding(binding), m_composed(composed) + using ref_t = core::smart_refctd_ptr; + + template requires std::is_base_of_v + inline DeferredFreeFunctor(SubAllocatedDescriptorSet* composed, uint32_t binding, size_type count, const value_type* addresses, const T*const *const objectsToHold) + : m_addresses(core::make_refctd_dynamic_array>(count)) + , m_objectsToHold(core::make_refctd_dynamic_array>(count)) + , m_binding(binding) + , m_composed(composed) { memcpy(m_addresses->data(), addresses, count * sizeof(value_type)); + for (size_t i=0u; i m_addresses; + core::smart_refctd_dynamic_array m_objectsToHold; SubAllocatedDescriptorSet* m_composed; // TODO: shouldn't be called `composed`, maybe `parent` or something uint32_t m_binding; }; @@ -355,10 +365,11 @@ class SubAllocatedDescriptorSet : public core::IReferenceCounted } // defers based on the conservative estimation if `futureWait` needs to be waited on, if doesn't will call nullify descriiptors internally immediately - inline void multi_deallocate(uint32_t binding, size_type count, const value_type* addr, const ISemaphore::SWaitInfo& futureWait) noexcept + template + inline void multi_deallocate(uint32_t binding, size_type count, const value_type* addr, const ISemaphore::SWaitInfo& futureWait, const T*const *const objectsToDrop=nullptr) noexcept { if (futureWait.semaphore) - multi_deallocate(binding, futureWait, DeferredFreeFunctor(this, binding, count, addr)); + multi_deallocate(binding, futureWait, DeferredFreeFunctor(this, binding, count, addr, objectsToDrop)); else { core::vector nulls(count); From 1c959430714a489c07a29fa84d66b9b00623ec61 Mon Sep 17 00:00:00 2001 From: Przemek Date: Thu, 15 May 2025 14:12:28 +0200 Subject: [PATCH 42/83] Updated examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 8677f1fc20..fc20a29406 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 8677f1fc20c10a41603f75a445a9901132e54321 +Subproject commit fc20a2940689494cc79c3525fb16e578855199bf From 24dfb1528b629bb5c60e55f5090ac3514fac6b49 Mon Sep 17 00:00:00 2001 From: Przemek Date: Thu, 15 May 2025 15:48:34 +0200 Subject: [PATCH 43/83] Updated examples_tests --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 0b010ea550..ab6dd2e3bb 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 0b010ea5503ab5f5460183d48d6aefb806c03baf +Subproject commit ab6dd2e3bbca153072f6cec0c84117429599e789 From 37785e5c1c894b11281e9c7bfc0a3c4be9be887a Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Thu, 15 May 2025 14:42:38 +0400 Subject: [PATCH 44/83] fix wrong check for nullDescriptors feature --- src/nbl/video/CVulkanLogicalDevice.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nbl/video/CVulkanLogicalDevice.cpp b/src/nbl/video/CVulkanLogicalDevice.cpp index 2e30a18269..e21cddf5fe 100644 --- a/src/nbl/video/CVulkanLogicalDevice.cpp +++ b/src/nbl/video/CVulkanLogicalDevice.cpp @@ -764,7 +764,7 @@ void CVulkanLogicalDevice::updateDescriptorSets_impl(const SUpdateDescriptorSets void CVulkanLogicalDevice::nullifyDescriptors_impl(const SDropDescriptorSetsParams& params) { const auto& drops = params.drops; - if (getEnabledFeatures().nullDescriptor) + if (!getEnabledFeatures().nullDescriptor) { return; } From 667e30d51ed04274fe1d5348f8569a020f3b8750 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Fri, 16 May 2025 09:05:38 +0400 Subject: [PATCH 45/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index ab6dd2e3bb..34a61a3370 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit ab6dd2e3bbca153072f6cec0c84117429599e789 +Subproject commit 34a61a337035d8f2b053f1fed002b5f2c85ffde5 From 8b094b40da4e7b9b91b973532702a5514d321ed3 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Fri, 16 May 2025 14:41:05 +0400 Subject: [PATCH 46/83] small LRUCache comment to help with usage --- include/nbl/core/containers/LRUCache.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/include/nbl/core/containers/LRUCache.h b/include/nbl/core/containers/LRUCache.h index fb36401288..469c213744 100644 --- a/include/nbl/core/containers/LRUCache.h +++ b/include/nbl/core/containers/LRUCache.h @@ -389,7 +389,7 @@ class ResizableLRUCache : protected impl::LRUCacheBase 0) From 7c04af6b580078129308a86806baf6218bc72df8 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Fri, 16 May 2025 14:41:16 +0400 Subject: [PATCH 47/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 34a61a3370..ada9c8b565 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 34a61a337035d8f2b053f1fed002b5f2c85ffde5 +Subproject commit ada9c8b565ee428ea7c2077fc46624247b2c74c5 From 315ce8699d06a3463481a1becc824618274d9ade Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Sun, 18 May 2025 15:14:17 +0400 Subject: [PATCH 48/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index ada9c8b565..2632c3abe1 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit ada9c8b565ee428ea7c2077fc46624247b2c74c5 +Subproject commit 2632c3abe127a226c1593a47491a381f32762680 From a4b42502355a6f93d0b1222d37c0526731313c14 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Tue, 20 May 2025 12:08:35 +0400 Subject: [PATCH 49/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 2632c3abe1..e2fef3a862 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 2632c3abe127a226c1593a47491a381f32762680 +Subproject commit e2fef3a8627437c307083651d67b40819d71d7d8 From 93cf3cf7ad7648b301fbed6793b97920bb606ab1 Mon Sep 17 00:00:00 2001 From: Fletterio Date: Tue, 20 May 2025 22:13:30 -0300 Subject: [PATCH 50/83] Adds standard bidirectional (const) iterator to the ResizableLRUCache --- .../nbl/core/containers/DoublyLinkedList.h | 128 ++++++++++++++++++ include/nbl/core/containers/LRUCache.h | 20 ++- 2 files changed, 145 insertions(+), 3 deletions(-) diff --git a/include/nbl/core/containers/DoublyLinkedList.h b/include/nbl/core/containers/DoublyLinkedList.h index 4dcea9bee0..8cf719beb6 100644 --- a/include/nbl/core/containers/DoublyLinkedList.h +++ b/include/nbl/core/containers/DoublyLinkedList.h @@ -69,6 +69,9 @@ template; using address_allocator_t = PoolAddressAllocator; @@ -273,6 +276,16 @@ class DoublyLinkedList } } + // Iterator stuff + Iterator begin(); + Iterator end(); + Iterator cbegin() const; + Iterator cend() const; + std::reverse_iterator rbegin(); + std::reverse_iterator rend(); + std::reverse_iterator crbegin() const; + std::reverse_iterator crend() const; + private: //allocate and get the address of the next free node inline uint32_t reserveAddress() @@ -344,9 +357,124 @@ class DoublyLinkedList disposal_func_t m_dispose_f; }; +// ---------------------------------------------------- ITERATOR ----------------------------------------------------------- + +// Satifies std::bidirectional_iterator +template +class DoublyLinkedList::Iterator +{ + using iterable_t = DoublyLinkedList; + using this_t = iterable_t::Iterator; + friend class iterable_t; +public: + using value_type = const Value; + using pointer = value_type*; + using reference = value_type&; + using difference_type = int32_t; + + Iterator() = default; + + // Prefix + Iterator& operator++() + { + m_current = m_iterable->get(m_current)->next; + return *this; + } + + Iterator& operator--() + { + m_current = m_current != invalid_iterator ? m_iterable->get(m_current)->prev : m_iterable->m_back; + return *this; + } + + // Postfix + Iterator operator++(int) + { + Iterator beforeIncrement = *this; + operator++(); + return beforeIncrement; + } + + Iterator operator--(int) + { + Iterator beforeDecrement = *this; + operator--(); + return beforeDecrement; + } + + // Comparison + bool operator==(const Iterator& rhs) const + { + return m_iterable == rhs.m_iterable && m_current == rhs.m_current; + } + + //Deref + value_type& operator*() const + { + return m_iterable->get(m_current)->data; + } + + value_type* operator->() const + { + return & operator*(); + } +private: + DoublyLinkedList::Iterator(const iterable_t* const iterable, uint32_t idx) : m_iterable(iterable), m_current(idx) {} + + const iterable_t* m_iterable; + uint32_t m_current; +}; + +template +DoublyLinkedList::Iterator DoublyLinkedList::begin() +{ + return Iterator(this, m_begin); +} + +template +DoublyLinkedList::Iterator DoublyLinkedList::cbegin() const +{ + return Iterator(this, m_begin); +} +template +DoublyLinkedList::Iterator DoublyLinkedList::end() +{ + return Iterator(this, invalid_iterator); } + +template +DoublyLinkedList::Iterator DoublyLinkedList::cend() const +{ + return Iterator(this, invalid_iterator); } +template +std::reverse_iterator::Iterator> DoublyLinkedList::rbegin() +{ + return std::reverse_iterator(Iterator(this, invalid_iterator)); +} + +template +std::reverse_iterator::Iterator> DoublyLinkedList::crbegin() const +{ + return std::reverse_iterator(Iterator(this, invalid_iterator)); +} + +template +std::reverse_iterator::Iterator> DoublyLinkedList::rend() +{ + return std::reverse_iterator(Iterator(this, m_begin)); +} + +template +std::reverse_iterator::Iterator> DoublyLinkedList::crend() const +{ + return std::reverse_iterator(Iterator(this, m_begin)); +} + +} //namespace core +} //namespace nbl + #endif diff --git a/include/nbl/core/containers/LRUCache.h b/include/nbl/core/containers/LRUCache.h index 469c213744..7cc063081b 100644 --- a/include/nbl/core/containers/LRUCache.h +++ b/include/nbl/core/containers/LRUCache.h @@ -228,7 +228,7 @@ template, typena class ResizableLRUCache : protected impl::LRUCacheBase > >, public core::Unmovable, public core::Uncopyable { // typedefs - using list_t = DoublyLinkedList >; + using list_t = DoublyLinkedList>; using base_t = impl::LRUCacheBase; using this_t = ResizableLRUCache; @@ -277,6 +277,9 @@ class ResizableLRUCache : protected impl::LRUCacheBase= base_t::m_list.getCapacity(); + const bool overflow = size() >= base_t::m_list.getCapacity(); if (overflow) { evictCallback(base_t::m_list.getBack()->data.second); @@ -405,7 +408,7 @@ class ResizableLRUCache : protected impl::LRUCacheBase 0) + if (size() > 0) return &base_t::m_list.getBack()->data.first; else return nullptr; @@ -441,6 +444,17 @@ class ResizableLRUCache : protected impl::LRUCacheBase LRU + Iterator begin() { return base_t::m_list.begin(); } + Iterator end() { return base_t::m_list.end(); } + Iterator cbegin() const { return base_t::m_list.cbegin(); } + Iterator cend() const { return base_t::m_list.cend(); } + std::reverse_iterator rbegin() { return base_t::m_list.rbegin(); } + std::reverse_iterator rend() { return base_t::m_list.rend(); } + std::reverse_iterator crbegin() const { return base_t::m_list.crbegin(); } + std::reverse_iterator crend() const { return base_t::m_list.crend(); } + protected: unordered_set m_shortcut_map; uint32_t m_capacity; From bca340cb54445db83d5e24364af0c1777ef3ea4a Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Wed, 21 May 2025 07:52:50 +0400 Subject: [PATCH 51/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index e2fef3a862..3f40b925c9 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit e2fef3a8627437c307083651d67b40819d71d7d8 +Subproject commit 3f40b925c97ece98c72527d5c85d2593471f26c9 From a53c1aabff3cbbfce2e6281a624663b9265c2433 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Wed, 21 May 2025 16:40:45 +0400 Subject: [PATCH 52/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 3f40b925c9..fccbcb2894 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 3f40b925c97ece98c72527d5c85d2593471f26c9 +Subproject commit fccbcb2894941d3743021dee874dbe545ea317b5 From 4dcdcb2f65d74257d9c2cd4fa236ed38eff3a802 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Thu, 22 May 2025 10:12:25 +0400 Subject: [PATCH 53/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index fccbcb2894..65fe2ab855 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit fccbcb2894941d3743021dee874dbe545ea317b5 +Subproject commit 65fe2ab855133edd71a89c4d2cedcf07596c49f8 From 9ddd2e2436435e1ef00d32e5577db76bc4d00d1f Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Fri, 23 May 2025 12:30:56 +0400 Subject: [PATCH 54/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 65fe2ab855..9d0d57d700 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 65fe2ab855133edd71a89c4d2cedcf07596c49f8 +Subproject commit 9d0d57d700178f6ce2786380f9b14b88bb373bc2 From 048ff079fb9e45babc40e4c767f65f8db746f4f1 Mon Sep 17 00:00:00 2001 From: Przemek Date: Fri, 23 May 2025 13:50:53 +0200 Subject: [PATCH 55/83] Updated examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index ab6dd2e3bb..723506eed5 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit ab6dd2e3bbca153072f6cec0c84117429599e789 +Subproject commit 723506eed5c6e80d8197a345ec4af46eb8829e62 From bc97090512242caa19caaf4ea8297fd610e8da41 Mon Sep 17 00:00:00 2001 From: Przemek Date: Fri, 23 May 2025 18:32:50 +0200 Subject: [PATCH 56/83] Updated examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index e18d8bb7a5..43f4dd616c 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit e18d8bb7a564a57ee2262cb224f424185ba8d853 +Subproject commit 43f4dd616c0f0b05ba58393ec138c28ad72a3a07 From a2a6d17b21e9a6c8ecd9ec66fc07029aa8d2f234 Mon Sep 17 00:00:00 2001 From: Fletterio Date: Fri, 23 May 2025 23:19:08 -0300 Subject: [PATCH 57/83] Add both const and mutable iterators, option for Value or Key-Value eviction for LRU Cache, deep copy for LRU cache --- .../nbl/core/containers/DoublyLinkedList.h | 77 +++++++++++-------- include/nbl/core/containers/LRUCache.h | 58 +++++++++++--- 2 files changed, 91 insertions(+), 44 deletions(-) diff --git a/include/nbl/core/containers/DoublyLinkedList.h b/include/nbl/core/containers/DoublyLinkedList.h index 8cf719beb6..7e56bc25fb 100644 --- a/include/nbl/core/containers/DoublyLinkedList.h +++ b/include/nbl/core/containers/DoublyLinkedList.h @@ -69,7 +69,9 @@ template class Iterator; + template friend class Iterator; using allocator_t = allocator; @@ -245,7 +247,15 @@ class DoublyLinkedList DoublyLinkedList() = default; - DoublyLinkedList(const DoublyLinkedList& other) = delete; + // Unless there's a way of knowing whether for our type a shallow copy is the same as invoking the copy constructor, + // we must iterate over the whole list and copy instance by instance + explicit DoublyLinkedList(const DoublyLinkedList& other) : DoublyLinkedList(other.m_cap, disposal_func_t(other.m_dispose_f), other.m_allocator) + { + if (!m_cap) return; // Allocation failed + // Reverse iteration since we push from the front + for (auto it = other.crbegin(); it != other.crend(); it++) + pushFront(value_t(*it)); + } DoublyLinkedList& operator=(const DoublyLinkedList& other) = delete; @@ -277,14 +287,14 @@ class DoublyLinkedList } // Iterator stuff - Iterator begin(); - Iterator end(); - Iterator cbegin() const; - Iterator cend() const; - std::reverse_iterator rbegin(); - std::reverse_iterator rend(); - std::reverse_iterator crbegin() const; - std::reverse_iterator crend() const; + Iterator begin(); + Iterator end(); + Iterator cbegin() const; + Iterator cend() const; + std::reverse_iterator> rbegin(); + std::reverse_iterator> rend(); + std::reverse_iterator> crbegin() const; + std::reverse_iterator> crend() const; private: //allocate and get the address of the next free node @@ -361,13 +371,14 @@ class DoublyLinkedList // Satifies std::bidirectional_iterator template +template class DoublyLinkedList::Iterator { - using iterable_t = DoublyLinkedList; - using this_t = iterable_t::Iterator; - friend class iterable_t; + using base_iterable_t = DoublyLinkedList; + using iterable_t = std::conditional_t; + friend class base_iterable_t; public: - using value_type = const Value; + using value_type = std::conditional_t; using pointer = value_type*; using reference = value_type&; using difference_type = int32_t; @@ -409,68 +420,68 @@ class DoublyLinkedList::Iterator } //Deref - value_type& operator*() const + reference operator*() const { return m_iterable->get(m_current)->data; } - value_type* operator->() const + pointer operator->() const { return & operator*(); } private: - DoublyLinkedList::Iterator(const iterable_t* const iterable, uint32_t idx) : m_iterable(iterable), m_current(idx) {} + Iterator(iterable_t* const iterable, uint32_t idx) : m_iterable(iterable), m_current(idx) {} - const iterable_t* m_iterable; + iterable_t* m_iterable; uint32_t m_current; }; template -DoublyLinkedList::Iterator DoublyLinkedList::begin() +DoublyLinkedList::Iterator DoublyLinkedList::begin() { - return Iterator(this, m_begin); + return Iterator(this, m_begin); } template -DoublyLinkedList::Iterator DoublyLinkedList::cbegin() const +DoublyLinkedList::Iterator DoublyLinkedList::cbegin() const { - return Iterator(this, m_begin); + return Iterator(this, m_begin); } template -DoublyLinkedList::Iterator DoublyLinkedList::end() +DoublyLinkedList::Iterator DoublyLinkedList::end() { - return Iterator(this, invalid_iterator); + return Iterator(this, invalid_iterator); } template -DoublyLinkedList::Iterator DoublyLinkedList::cend() const +DoublyLinkedList::Iterator DoublyLinkedList::cend() const { - return Iterator(this, invalid_iterator); + return Iterator(this, invalid_iterator); } template -std::reverse_iterator::Iterator> DoublyLinkedList::rbegin() +std::reverse_iterator::Iterator> DoublyLinkedList::rbegin() { - return std::reverse_iterator(Iterator(this, invalid_iterator)); + return std::reverse_iterator>(Iterator(this, invalid_iterator)); } template -std::reverse_iterator::Iterator> DoublyLinkedList::crbegin() const +std::reverse_iterator::Iterator> DoublyLinkedList::crbegin() const { - return std::reverse_iterator(Iterator(this, invalid_iterator)); + return std::reverse_iterator>(Iterator(this, invalid_iterator)); } template -std::reverse_iterator::Iterator> DoublyLinkedList::rend() +std::reverse_iterator::Iterator> DoublyLinkedList::rend() { - return std::reverse_iterator(Iterator(this, m_begin)); + return std::reverse_iterator>(Iterator(this, m_begin)); } template -std::reverse_iterator::Iterator> DoublyLinkedList::crend() const +std::reverse_iterator::Iterator> DoublyLinkedList::crend() const { - return std::reverse_iterator(Iterator(this, m_begin)); + return std::reverse_iterator>(Iterator(this, m_begin)); } } //namespace core diff --git a/include/nbl/core/containers/LRUCache.h b/include/nbl/core/containers/LRUCache.h index 7cc063081b..07a35b87f7 100644 --- a/include/nbl/core/containers/LRUCache.h +++ b/include/nbl/core/containers/LRUCache.h @@ -38,6 +38,13 @@ class LRUCacheBase LRUCacheBase(const uint32_t capacity, MapHash&& _hash, MapEquals&& _equals, disposal_func_t&& df) : m_list(capacity, std::move(df)), m_hash(std::move(_hash)), m_equals(std::move(_equals)), searchedKey(nullptr) { } + // CAREFUL: searchedKey was left as nullptr because for ResizableLRUCache, it's always set by some method before being used + // If you implement another LRUCache where this is not the case and the state of the copy has to match exactly, it needs to be consistent. + // What I would do in such a case (either in this same class or dividing this class again into two, one that leaves the searchedKey null and + // another that sets it to a consistent value) would be to iterate over every Key-Value pair in the copy, and set searchedKey to point + // to the Key such that `MapEquals(Key, *other.searchedKey)` + LRUCacheBase(const LRUCacheBase& other) : m_list(other.m_list), m_hash(other.m_hash), m_equals(other.m_equals), searchedKey(nullptr) {} + public: inline const Key& getReference(const uint32_t nodeAddr) const { @@ -221,6 +228,19 @@ class [[deprecated]] LRUCache : protected impl::LRUCacheBase m_shortcut_map; }; +namespace impl +{ + template + concept LRUCacheValueEvictionCallback = std::invocable; + + template + concept LRUCacheKeyValueEvictionCallback = std::invocable; + + template + concept LRUCacheInsertEvictionCallback = LRUCacheValueEvictionCallback + || LRUCacheKeyValueEvictionCallback; +} //namespace impl + // Key-Value Least Recently Used cache // Capacity can be increased at user's will // When the cache is full inserting will remove the least used entry @@ -278,7 +298,8 @@ class ResizableLRUCache : protected impl::LRUCacheBase + using Iterator = typename list_t::template Iterator; using disposal_func_t = typename base_t::disposal_func_t; using assoc_t = typename base_t::list_value_t; @@ -292,6 +313,13 @@ class ResizableLRUCache : protected impl::LRUCacheBase> 2, WrapHash{this}, WrapEquals{this}) + { + m_shortcut_map.reserve(m_capacity); + } + inline void print(core::smart_refctd_ptr logger) { logger->log("Printing LRU cache contents"); @@ -326,7 +354,7 @@ class ResizableLRUCache : protected impl::LRUCacheBase EvictionCallback> requires std::is_constructible_v // && (std::is_same_v || std::is_assignable_v) // is_assignable_v returns false :( + template requires std::is_constructible_v && impl::LRUCacheInsertEvictionCallback// && (std::is_same_v || std::is_assignable_v) // is_assignable_v returns false :( inline Value* insert(K&& k, V&& v, EvictionCallback&& evictCallback) { bool success; @@ -342,7 +370,15 @@ class ResizableLRUCache : protected impl::LRUCacheBase= base_t::m_list.getCapacity(); if (overflow) { - evictCallback(base_t::m_list.getBack()->data.second); + if constexpr (impl::LRUCacheValueEvictionCallback) + { + evictCallback(base_t::m_list.getBack()->data.second); + } + // LRUCacheKeyValueEvictionCallback + else + { + evictCallback(base_t::m_list.getBack()->data.first, base_t::m_list.getBack()->data.second); + } m_shortcut_map.erase(base_t::m_list.getLastAddress()); base_t::m_list.popBack(); } @@ -446,14 +482,14 @@ class ResizableLRUCache : protected impl::LRUCacheBase LRU - Iterator begin() { return base_t::m_list.begin(); } - Iterator end() { return base_t::m_list.end(); } - Iterator cbegin() const { return base_t::m_list.cbegin(); } - Iterator cend() const { return base_t::m_list.cend(); } - std::reverse_iterator rbegin() { return base_t::m_list.rbegin(); } - std::reverse_iterator rend() { return base_t::m_list.rend(); } - std::reverse_iterator crbegin() const { return base_t::m_list.crbegin(); } - std::reverse_iterator crend() const { return base_t::m_list.crend(); } + Iterator begin() { return base_t::m_list.begin(); } + Iterator end() { return base_t::m_list.end(); } + Iterator cbegin() const { return base_t::m_list.cbegin(); } + Iterator cend() const { return base_t::m_list.cend(); } + std::reverse_iterator> rbegin() { return base_t::m_list.rbegin(); } + std::reverse_iterator> rend() { return base_t::m_list.rend(); } + std::reverse_iterator> crbegin() const { return base_t::m_list.crbegin(); } + std::reverse_iterator> crend() const { return base_t::m_list.crend(); } protected: unordered_set m_shortcut_map; From 1c529e92b246be2984800448288158d215d17bdb Mon Sep 17 00:00:00 2001 From: Fletterio Date: Fri, 23 May 2025 23:22:16 -0300 Subject: [PATCH 58/83] Minor comment added --- include/nbl/core/containers/LRUCache.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/include/nbl/core/containers/LRUCache.h b/include/nbl/core/containers/LRUCache.h index 07a35b87f7..695ace8197 100644 --- a/include/nbl/core/containers/LRUCache.h +++ b/include/nbl/core/containers/LRUCache.h @@ -314,6 +314,9 @@ class ResizableLRUCache : protected impl::LRUCacheBase> 2, WrapHash{this}, WrapEquals{this}) { From 0694b846d365b494aa9a1a358ac14ea2432fa44b Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Sat, 24 May 2025 18:47:40 +0400 Subject: [PATCH 59/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index e18d8bb7a5..6999e36740 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit e18d8bb7a564a57ee2262cb224f424185ba8d853 +Subproject commit 6999e3674052eb3dcb6a29e9d651c862b4c4d215 From 6d5e6786edae9820f59cee3adfbe9774f674a816 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Sat, 24 May 2025 18:54:22 +0400 Subject: [PATCH 60/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 6999e36740..96cc801291 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 6999e3674052eb3dcb6a29e9d651c862b4c4d215 +Subproject commit 96cc801291537b119e053342cf42e29ec1c0fd26 From 81f26c8745b8b65811f6553a4943356ea619b1b7 Mon Sep 17 00:00:00 2001 From: Fletterio Date: Sat, 24 May 2025 15:07:41 -0300 Subject: [PATCH 61/83] Address PR name consistency comments, adds copy contructor logic for DoublyLinkedList so that lists of trivially copyable types get copied more efficiently --- .../nbl/core/containers/DoublyLinkedList.h | 94 ++++++++++++------- include/nbl/core/containers/LRUCache.h | 26 ++--- 2 files changed, 69 insertions(+), 51 deletions(-) diff --git a/include/nbl/core/containers/DoublyLinkedList.h b/include/nbl/core/containers/DoublyLinkedList.h index 7e56bc25fb..4061495a4d 100644 --- a/include/nbl/core/containers/DoublyLinkedList.h +++ b/include/nbl/core/containers/DoublyLinkedList.h @@ -74,6 +74,9 @@ class DoublyLinkedList template friend class Iterator; + using iterator = Iterator; + using const_iterator = Iterator; + using allocator_t = allocator; using allocator_traits_t = std::allocator_traits; using address_allocator_t = PoolAddressAllocator; @@ -81,6 +84,8 @@ class DoublyLinkedList using value_t = Value; using disposal_func_t = std::function; + static constexpr bool IsTriviallyCopyable = std::is_trivially_copyable_v; + _NBL_STATIC_INLINE_CONSTEXPR uint32_t invalid_iterator = node_t::invalid_iterator; // get the fixed capacity @@ -238,23 +243,42 @@ class DoublyLinkedList // Offset the array start by the storage used by the address allocator m_array = reinterpret_cast(reinterpret_cast(m_reservedSpace) + addressAllocatorStorageSize * sizeof(node_t)); - m_addressAllocator = address_allocator_t(m_reservedSpace, 0u, 0u, 1u, capacity, 1u); // If allocation failed, create list with no capacity to indicate creation failed m_cap = m_reservedSpace ? capacity : 0; - m_back = invalid_iterator; - m_begin = invalid_iterator; + m_addressAllocator = address_allocator_t(m_reservedSpace, 0u, 0u, 1u, m_cap, 1u); } DoublyLinkedList() = default; - // Unless there's a way of knowing whether for our type a shallow copy is the same as invoking the copy constructor, - // we must iterate over the whole list and copy instance by instance - explicit DoublyLinkedList(const DoublyLinkedList& other) : DoublyLinkedList(other.m_cap, disposal_func_t(other.m_dispose_f), other.m_allocator) + // Copy Constructor + explicit DoublyLinkedList(const DoublyLinkedList& other) : m_dispose_f(other.m_dispose_f), m_allocator(other.m_allocator) { + const size_t addressAllocatorStorageSize = (address_allocator_t::reserved_size(1u, other.m_cap, 1u) + sizeof(node_t) - 1) / sizeof(node_t); + m_currentAllocationSize = addressAllocatorStorageSize + other.m_cap; + m_reservedSpace = reinterpret_cast(allocator_traits_t::allocate(m_allocator, m_currentAllocationSize)); + // If allocation failed, create a list with no capacity + m_cap = m_reservedSpace ? other.m_cap : 0; if (!m_cap) return; // Allocation failed - // Reverse iteration since we push from the front - for (auto it = other.crbegin(); it != other.crend(); it++) - pushFront(value_t(*it)); + // Offset the array start by the storage used by the address allocator + m_array = reinterpret_cast(reinterpret_cast(m_reservedSpace) + addressAllocatorStorageSize * sizeof(node_t)); + + if constexpr (IsTriviallyCopyable) + { + // Create new address allocator by copying state + m_addressAllocator = address_allocator_t(m_cap, other.m_addressAllocator, m_reservedSpace); + // Copy memory over + memcpy(m_array, other.m_array, m_cap * sizeof(node_t)); + m_back = other.m_back; + m_begin = other.m_begin; + } + else + { + m_addressAllocator = address_allocator_t(m_reservedSpace, 0u, 0u, 1u, m_cap, 1u); + // Reverse iteration since we push from the front + for (auto it = other.crbegin(); it != other.crend(); it++) + pushFront(value_t(*it)); + + } } DoublyLinkedList& operator=(const DoublyLinkedList& other) = delete; @@ -287,14 +311,14 @@ class DoublyLinkedList } // Iterator stuff - Iterator begin(); - Iterator end(); - Iterator cbegin() const; - Iterator cend() const; - std::reverse_iterator> rbegin(); - std::reverse_iterator> rend(); - std::reverse_iterator> crbegin() const; - std::reverse_iterator> crend() const; + iterator begin(); + iterator end(); + const_iterator cbegin() const; + const_iterator cend() const; + std::reverse_iterator rbegin(); + std::reverse_iterator rend(); + std::reverse_iterator crbegin() const; + std::reverse_iterator crend() const; private: //allocate and get the address of the next free node @@ -362,8 +386,8 @@ class DoublyLinkedList node_t* m_array; uint32_t m_cap; - uint32_t m_back; - uint32_t m_begin; + uint32_t m_back = invalid_iterator; + uint32_t m_begin = invalid_iterator; disposal_func_t m_dispose_f; }; @@ -437,51 +461,51 @@ class DoublyLinkedList::Iterator }; template -DoublyLinkedList::Iterator DoublyLinkedList::begin() +DoublyLinkedList::iterator DoublyLinkedList::begin() { - return Iterator(this, m_begin); + return iterator(this, m_begin); } template -DoublyLinkedList::Iterator DoublyLinkedList::cbegin() const +DoublyLinkedList::const_iterator DoublyLinkedList::cbegin() const { - return Iterator(this, m_begin); + return const_iterator(this, m_begin); } template -DoublyLinkedList::Iterator DoublyLinkedList::end() +DoublyLinkedList::iterator DoublyLinkedList::end() { - return Iterator(this, invalid_iterator); + return iterator(this, invalid_iterator); } template -DoublyLinkedList::Iterator DoublyLinkedList::cend() const +DoublyLinkedList::const_iterator DoublyLinkedList::cend() const { - return Iterator(this, invalid_iterator); + return const_iterator(this, invalid_iterator); } template -std::reverse_iterator::Iterator> DoublyLinkedList::rbegin() +std::reverse_iterator::iterator> DoublyLinkedList::rbegin() { - return std::reverse_iterator>(Iterator(this, invalid_iterator)); + return std::reverse_iterator(iterator(this, invalid_iterator)); } template -std::reverse_iterator::Iterator> DoublyLinkedList::crbegin() const +std::reverse_iterator::const_iterator> DoublyLinkedList::crbegin() const { - return std::reverse_iterator>(Iterator(this, invalid_iterator)); + return std::reverse_iterator(const_iterator(this, invalid_iterator)); } template -std::reverse_iterator::Iterator> DoublyLinkedList::rend() +std::reverse_iterator::iterator> DoublyLinkedList::rend() { - return std::reverse_iterator>(Iterator(this, m_begin)); + return std::reverse_iterator(iterator(this, m_begin)); } template -std::reverse_iterator::Iterator> DoublyLinkedList::crend() const +std::reverse_iterator::const_iterator> DoublyLinkedList::crend() const { - return std::reverse_iterator>(Iterator(this, m_begin)); + return std::reverse_iterator(const_iterator(this, m_begin)); } } //namespace core diff --git a/include/nbl/core/containers/LRUCache.h b/include/nbl/core/containers/LRUCache.h index 695ace8197..e4d78c94e7 100644 --- a/include/nbl/core/containers/LRUCache.h +++ b/include/nbl/core/containers/LRUCache.h @@ -38,11 +38,6 @@ class LRUCacheBase LRUCacheBase(const uint32_t capacity, MapHash&& _hash, MapEquals&& _equals, disposal_func_t&& df) : m_list(capacity, std::move(df)), m_hash(std::move(_hash)), m_equals(std::move(_equals)), searchedKey(nullptr) { } - // CAREFUL: searchedKey was left as nullptr because for ResizableLRUCache, it's always set by some method before being used - // If you implement another LRUCache where this is not the case and the state of the copy has to match exactly, it needs to be consistent. - // What I would do in such a case (either in this same class or dividing this class again into two, one that leaves the searchedKey null and - // another that sets it to a consistent value) would be to iterate over every Key-Value pair in the copy, and set searchedKey to point - // to the Key such that `MapEquals(Key, *other.searchedKey)` LRUCacheBase(const LRUCacheBase& other) : m_list(other.m_list), m_hash(other.m_hash), m_equals(other.m_equals), searchedKey(nullptr) {} public: @@ -298,8 +293,8 @@ class ResizableLRUCache : protected impl::LRUCacheBase - using Iterator = typename list_t::template Iterator; + using iterator = typename list_t::iterator; + using const_iterator = typename list_t::const_iterator; using disposal_func_t = typename base_t::disposal_func_t; using assoc_t = typename base_t::list_value_t; @@ -313,7 +308,6 @@ class ResizableLRUCache : protected impl::LRUCacheBase LRU - Iterator begin() { return base_t::m_list.begin(); } - Iterator end() { return base_t::m_list.end(); } - Iterator cbegin() const { return base_t::m_list.cbegin(); } - Iterator cend() const { return base_t::m_list.cend(); } - std::reverse_iterator> rbegin() { return base_t::m_list.rbegin(); } - std::reverse_iterator> rend() { return base_t::m_list.rend(); } - std::reverse_iterator> crbegin() const { return base_t::m_list.crbegin(); } - std::reverse_iterator> crend() const { return base_t::m_list.crend(); } + iterator begin() { return base_t::m_list.begin(); } + iterator end() { return base_t::m_list.end(); } + const_iterator cbegin() const { return base_t::m_list.cbegin(); } + const_iterator cend() const { return base_t::m_list.cend(); } + std::reverse_iterator rbegin() { return base_t::m_list.rbegin(); } + std::reverse_iterator rend() { return base_t::m_list.rend(); } + std::reverse_iterator crbegin() const { return base_t::m_list.crbegin(); } + std::reverse_iterator crend() const { return base_t::m_list.crend(); } protected: unordered_set m_shortcut_map; From 3acdf2417c9a4e2d37e71bd3ccecab0de449e96a Mon Sep 17 00:00:00 2001 From: Fletterio Date: Sat, 24 May 2025 15:14:16 -0300 Subject: [PATCH 62/83] Minor refactor to previous commit --- include/nbl/core/containers/DoublyLinkedList.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/include/nbl/core/containers/DoublyLinkedList.h b/include/nbl/core/containers/DoublyLinkedList.h index 4061495a4d..af7edcc01a 100644 --- a/include/nbl/core/containers/DoublyLinkedList.h +++ b/include/nbl/core/containers/DoublyLinkedList.h @@ -84,8 +84,6 @@ class DoublyLinkedList using value_t = Value; using disposal_func_t = std::function; - static constexpr bool IsTriviallyCopyable = std::is_trivially_copyable_v; - _NBL_STATIC_INLINE_CONSTEXPR uint32_t invalid_iterator = node_t::invalid_iterator; // get the fixed capacity @@ -262,7 +260,7 @@ class DoublyLinkedList // Offset the array start by the storage used by the address allocator m_array = reinterpret_cast(reinterpret_cast(m_reservedSpace) + addressAllocatorStorageSize * sizeof(node_t)); - if constexpr (IsTriviallyCopyable) + if constexpr (std::is_trivially_copyable_v) { // Create new address allocator by copying state m_addressAllocator = address_allocator_t(m_cap, other.m_addressAllocator, m_reservedSpace); From 61d33b030ff6712a6addaff48a91ed02ea6dd480 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Mon, 26 May 2025 15:49:51 +0400 Subject: [PATCH 63/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 96cc801291..0b693638c1 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 96cc801291537b119e053342cf42e29ec1c0fd26 +Subproject commit 0b693638c1f68f13229ad103d10bc4791de2c13b From b6534f580f6a7c4548009e6930506c4fdf0b5e08 Mon Sep 17 00:00:00 2001 From: Przemek Date: Mon, 26 May 2025 14:43:04 +0200 Subject: [PATCH 64/83] Updated examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 5fec9bc21a..4b717810a4 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 5fec9bc21a2da8099a22dbc671587d9fde7edd69 +Subproject commit 4b717810a48721d6793f4606c6b5cdfeebc32319 From 1c730141a7faffd3c8f33139cb81bbbffca71296 Mon Sep 17 00:00:00 2001 From: Przemek Date: Mon, 26 May 2025 16:31:05 +0200 Subject: [PATCH 65/83] Updated examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 4b717810a4..d33f32e5b7 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 4b717810a48721d6793f4606c6b5cdfeebc32319 +Subproject commit d33f32e5b7370bc3e87488ae455a8e74419deba1 From 2fae94bd614f5040068442d83d60231485dfa459 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Wed, 28 May 2025 13:47:03 +0400 Subject: [PATCH 66/83] update examples_tests --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index d33f32e5b7..a1c6dd1a16 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit d33f32e5b7370bc3e87488ae455a8e74419deba1 +Subproject commit a1c6dd1a16bb09a76e43525c091a8561111ee16d From 6959ecc555c00f2f4f6ed82d1f0f5de7b5057cbd Mon Sep 17 00:00:00 2001 From: Przemek Date: Thu, 29 May 2025 16:31:29 +0200 Subject: [PATCH 67/83] Updated examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index a1c6dd1a16..8a4fde3eb4 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit a1c6dd1a16bb09a76e43525c091a8561111ee16d +Subproject commit 8a4fde3eb42445737764145c33966cbb5ff44d94 From 7a7bfddaf06d9f787914e642c1562848852fda4a Mon Sep 17 00:00:00 2001 From: Przemek Date: Fri, 30 May 2025 16:37:28 +0200 Subject: [PATCH 68/83] Updated examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 8a4fde3eb4..f72a308fee 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 8a4fde3eb42445737764145c33966cbb5ff44d94 +Subproject commit f72a308feefebfd47e22fea756ed8a50dd78e30d From 3bf9fc143451c2e9c2f4f1d4ae6be2aeb0357a3f Mon Sep 17 00:00:00 2001 From: Przemek Date: Sat, 31 May 2025 12:45:08 +0200 Subject: [PATCH 69/83] Updated examples_tests --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index f72a308fee..5d139c4fba 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit f72a308feefebfd47e22fea756ed8a50dd78e30d +Subproject commit 5d139c4fbaae84decc0ca84b8eac3b070b396b85 From db7cc9ad2ae389ade349d586562f97ecd958e7e2 Mon Sep 17 00:00:00 2001 From: Przemek Date: Sat, 31 May 2025 12:51:04 +0200 Subject: [PATCH 70/83] Updated examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 5d139c4fba..7762984070 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 5d139c4fbaae84decc0ca84b8eac3b070b396b85 +Subproject commit 7762984070daa3ac424d320ca91ecd3e8f9f0892 From f6315dd562254fe21f4a37ffe664dddc7e9e54f5 Mon Sep 17 00:00:00 2001 From: Przemek Date: Tue, 3 Jun 2025 14:49:00 +0200 Subject: [PATCH 71/83] Updated examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 7762984070..8d50e3ea0d 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 7762984070daa3ac424d320ca91ecd3e8f9f0892 +Subproject commit 8d50e3ea0d8099f791e887667f6b6c10d483f5b6 From 1fa2bff7f1213491d5840dd7b63304cc65e66e0f Mon Sep 17 00:00:00 2001 From: Przemek Date: Tue, 3 Jun 2025 15:45:43 +0200 Subject: [PATCH 72/83] Updated examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 8d50e3ea0d..27cd66fe70 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 8d50e3ea0d8099f791e887667f6b6c10d483f5b6 +Subproject commit 27cd66fe70542eb1147fccf4cd9d4073de493924 From 51ffe199cdc786341e016cd5976f69ea3a014c9d Mon Sep 17 00:00:00 2001 From: Przemek Date: Sat, 7 Jun 2025 15:52:14 +0200 Subject: [PATCH 73/83] Updated examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 27cd66fe70..d1a4e8e8e7 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 27cd66fe70542eb1147fccf4cd9d4073de493924 +Subproject commit d1a4e8e8e7f21390a7d817bc0bf7f2d984ac4253 From aa08fed73139841868e8e8144bb512dfd7e70562 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Mon, 9 Jun 2025 12:34:50 +0400 Subject: [PATCH 74/83] IUtilities constructor to static create --- include/nbl/video/utilities/IUtilities.h | 109 +++++++++++++++-------- 1 file changed, 74 insertions(+), 35 deletions(-) diff --git a/include/nbl/video/utilities/IUtilities.h b/include/nbl/video/utilities/IUtilities.h index 00776ba01d..af16859c08 100644 --- a/include/nbl/video/utilities/IUtilities.h +++ b/include/nbl/video/utilities/IUtilities.h @@ -19,26 +19,40 @@ namespace nbl::video class NBL_API2 IUtilities : public core::IReferenceCounted { - protected: +protected: constexpr static inline uint32_t maxStreamingBufferAllocationAlignment = 64u*1024u; // if you need larger alignments then you're not right in the head constexpr static inline uint32_t minStreamingBufferAllocationSize = 1024u; constexpr static inline uint32_t OptimalCoalescedInvocationXferSize = sizeof(uint32_t); - uint32_t m_allocationAlignment = 0u; - uint32_t m_allocationAlignmentForBufferImageCopy = 0u; + IUtilities( core::smart_refctd_ptr&& device, + nbl::system::logger_opt_smart_ptr&& logger, + core::smart_refctd_ptr >&& defaultUploadBuffer, + core::smart_refctd_ptr >&& defaultDownloadBuffer, + uint32_t allocationAlignment, + uint32_t allocationAlignmentForBufferImageCopy) + : m_device(std::move(device)) + , m_logger(nbl::system::logger_opt_smart_ptr(logger)) + , m_defaultUploadBuffer(std::move(defaultUploadBuffer)) + , m_defaultDownloadBuffer(std::move(defaultDownloadBuffer)) + , m_allocationAlignment(allocationAlignment) + , m_allocationAlignmentForBufferImageCopy(allocationAlignmentForBufferImageCopy) + { + m_defaultDownloadBuffer->getBuffer()->setObjectDebugName(("Default Download Buffer of Utilities "+std::to_string(ptrdiff_t(this))).c_str()); + m_defaultUploadBuffer->getBuffer()->setObjectDebugName(("Default Upload Buffer of Utilities "+std::to_string(ptrdiff_t(this))).c_str()); + } + + IUtilities() = delete; - nbl::system::logger_opt_smart_ptr m_logger; +public: - public: - IUtilities(core::smart_refctd_ptr&& device, nbl::system::logger_opt_smart_ptr&& logger=nullptr, const uint32_t downstreamSize=0x4000000u, const uint32_t upstreamSize=0x4000000u) - : m_device(core::smart_refctd_ptr(device)), m_logger(nbl::system::logger_opt_smart_ptr(logger)) + static core::smart_refctd_ptr create(core::smart_refctd_ptr&& device, nbl::system::logger_opt_smart_ptr&& logger = nullptr, const uint32_t downstreamSize = 0x4000000u, const uint32_t upstreamSize = 0x4000000u) { - auto physicalDevice = m_device->getPhysicalDevice(); + auto physicalDevice = device->getPhysicalDevice(); const auto& limits = physicalDevice->getLimits(); - + auto queueFamProps = physicalDevice->getQueueFamilyProperties(); uint32_t minImageTransferGranularityVolume = 1u; // minImageTransferGranularity.width * height * depth - + for (auto& qf : queueFamProps) { uint32_t volume = qf.minImageTransferGranularity.width*qf.minImageTransferGranularity.height*qf.minImageTransferGranularity.depth; @@ -46,10 +60,9 @@ class NBL_API2 IUtilities : public core::IReferenceCounted minImageTransferGranularityVolume = volume; } - // host-mapped device memory needs to have this alignment in flush/invalidate calls, therefore this is the streaming buffer's "allocationAlignment". - m_allocationAlignment = limits.nonCoherentAtomSize; - m_allocationAlignmentForBufferImageCopy = core::max(limits.optimalBufferCopyOffsetAlignment,m_allocationAlignment); - + const uint32_t allocationAlignment = limits.nonCoherentAtomSize; + const uint32_t allocationAlignmentForBufferImageCopy = core::max(limits.optimalBufferCopyOffsetAlignment,allocationAlignment); + const uint32_t bufferOptimalTransferAtom = limits.maxResidentInvocations * OptimalCoalescedInvocationXferSize; const uint32_t maxImageOptimalTransferAtom = limits.maxResidentInvocations * asset::TexelBlockInfo(asset::EF_R64G64B64A64_SFLOAT).getBlockByteSize() * minImageTransferGranularityVolume; const uint32_t minImageOptimalTransferAtom = limits.maxResidentInvocations * asset::TexelBlockInfo(asset::EF_R8_UINT).getBlockByteSize(); @@ -57,16 +70,19 @@ class NBL_API2 IUtilities : public core::IReferenceCounted const uint32_t minOptimalTransferAtom = core::min(bufferOptimalTransferAtom,minImageOptimalTransferAtom); // allocationAlignment <= minBlockSize <= minOptimalTransferAtom <= maxOptimalTransferAtom - assert(m_allocationAlignment <= minStreamingBufferAllocationSize); - assert(m_allocationAlignmentForBufferImageCopy <= minStreamingBufferAllocationSize); - - assert(minStreamingBufferAllocationSize <= minOptimalTransferAtom); - assert(minOptimalTransferAtom <= maxOptimalTransferAtom); - - assert(minStreamingBufferAllocationSize % m_allocationAlignment == 0u); - assert(minStreamingBufferAllocationSize % m_allocationAlignmentForBufferImageCopy == 0u); + + const bool transferConstaintsSatisfied = + (allocationAlignment <= minStreamingBufferAllocationSize) && + (allocationAlignmentForBufferImageCopy <= minStreamingBufferAllocationSize) && + (minStreamingBufferAllocationSize <= minOptimalTransferAtom) && + (minOptimalTransferAtom <= maxOptimalTransferAtom) && + (minStreamingBufferAllocationSize % allocationAlignment == 0u) && + (minStreamingBufferAllocationSize % allocationAlignmentForBufferImageCopy == 0u); + + if (!transferConstaintsSatisfied) + return nullptr; - const auto& enabledFeatures = m_device->getEnabledFeatures(); + const auto& enabledFeatures = device->getEnabledFeatures(); IGPUBuffer::SCreationParams streamingBufferCreationParams = {}; auto commonUsages = core::bitflag(IGPUBuffer::EUF_STORAGE_TEXEL_BUFFER_BIT)|IGPUBuffer::EUF_STORAGE_BUFFER_BIT|IGPUBuffer::EUF_SHADER_DEVICE_ADDRESS_BIT; @@ -74,7 +90,11 @@ class NBL_API2 IUtilities : public core::IReferenceCounted commonUsages |= IGPUBuffer::EUF_ACCELERATION_STRUCTURE_STORAGE_BIT; core::bitflag allocateFlags(IDeviceMemoryAllocation::EMAF_DEVICE_ADDRESS_BIT); + + core::smart_refctd_ptr > defaultUploadBuffer = nullptr; + core::smart_refctd_ptr > defaultDownloadBuffer = nullptr; + // Try Create Download Buffer { IGPUBuffer::SCreationParams streamingBufferCreationParams = {}; streamingBufferCreationParams.size = downstreamSize; @@ -82,12 +102,19 @@ class NBL_API2 IUtilities : public core::IReferenceCounted streamingBufferCreationParams.usage = commonUsages|IGPUBuffer::EUF_TRANSFER_DST_BIT; if (enabledFeatures.conditionalRendering) streamingBufferCreationParams.usage |= IGPUBuffer::EUF_CONDITIONAL_RENDERING_BIT_EXT; - auto buffer = m_device->createBuffer(std::move(streamingBufferCreationParams)); + auto buffer = device->createBuffer(std::move(streamingBufferCreationParams)); auto reqs = buffer->getMemoryReqs(); reqs.memoryTypeBits &= physicalDevice->getDownStreamingMemoryTypeBits(); - auto memOffset = m_device->allocate(reqs, buffer.get(), allocateFlags); - auto mem = memOffset.memory; + auto deviceMemAllocation = device->allocate(reqs, buffer.get(), allocateFlags); + + if (!deviceMemAllocation.isValid()) + { + // allocation failed + return nullptr; + } + + auto mem = deviceMemAllocation.memory; core::bitflag access(IDeviceMemoryAllocation::EMCAF_NO_MAPPING_ACCESS); const auto memProps = mem->getMemoryPropertyFlags(); @@ -98,9 +125,9 @@ class NBL_API2 IUtilities : public core::IReferenceCounted assert(access.value); mem->map({0ull,reqs.size},access); - m_defaultDownloadBuffer = core::make_smart_refctd_ptr>(asset::SBufferRange{0ull,downstreamSize,std::move(buffer)},maxStreamingBufferAllocationAlignment,minStreamingBufferAllocationSize); - m_defaultDownloadBuffer->getBuffer()->setObjectDebugName(("Default Download Buffer of Utilities "+std::to_string(ptrdiff_t(this))).c_str()); + defaultDownloadBuffer = core::make_smart_refctd_ptr>(asset::SBufferRange{0ull,downstreamSize,std::move(buffer)},maxStreamingBufferAllocationAlignment,minStreamingBufferAllocationSize); } + // Try Create Upload Buffer { IGPUBuffer::SCreationParams streamingBufferCreationParams = {}; streamingBufferCreationParams.size = upstreamSize; @@ -109,13 +136,19 @@ class NBL_API2 IUtilities : public core::IReferenceCounted streamingBufferCreationParams.usage |= IGPUBuffer::EUF_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT; if (enabledFeatures.rayTracingPipeline) streamingBufferCreationParams.usage |= IGPUBuffer::EUF_SHADER_BINDING_TABLE_BIT; - auto buffer = m_device->createBuffer(std::move(streamingBufferCreationParams)); + auto buffer = device->createBuffer(std::move(streamingBufferCreationParams)); auto reqs = buffer->getMemoryReqs(); reqs.memoryTypeBits &= physicalDevice->getUpStreamingMemoryTypeBits(); - auto memOffset = m_device->allocate(reqs, buffer.get(), allocateFlags); + auto deviceMemAllocation = device->allocate(reqs, buffer.get(), allocateFlags); + + if (!deviceMemAllocation.isValid()) + { + // allocation failed + return nullptr; + } - auto mem = memOffset.memory; + auto mem = deviceMemAllocation.memory; core::bitflag access(IDeviceMemoryAllocation::EMCAF_NO_MAPPING_ACCESS); const auto memProps = mem->getMemoryPropertyFlags(); if (memProps.hasFlags(IDeviceMemoryAllocation::EMPF_HOST_READABLE_BIT)) @@ -125,9 +158,9 @@ class NBL_API2 IUtilities : public core::IReferenceCounted assert(access.value); mem->map({0ull,reqs.size},access); - m_defaultUploadBuffer = core::make_smart_refctd_ptr>(asset::SBufferRange{0ull,upstreamSize,std::move(buffer)},maxStreamingBufferAllocationAlignment,minStreamingBufferAllocationSize); - m_defaultUploadBuffer->getBuffer()->setObjectDebugName(("Default Upload Buffer of Utilities "+std::to_string(ptrdiff_t(this))).c_str()); + defaultUploadBuffer = core::make_smart_refctd_ptr>(asset::SBufferRange{0ull,upstreamSize,std::move(buffer)},maxStreamingBufferAllocationAlignment,minStreamingBufferAllocationSize); } + #if 0 // TODO: port m_propertyPoolHandler = core::make_smart_refctd_ptr(core::smart_refctd_ptr(m_device)); // smaller workgroups fill occupancy gaps better, especially on new Nvidia GPUs, but we don't want too small workgroups on mobile @@ -135,6 +168,9 @@ class NBL_API2 IUtilities : public core::IReferenceCounted const auto scan_workgroup_size = core::max(core::roundDownToPoT(limits.maxWorkgroupSize[0]) >> 1u, 128u); m_scanner = core::make_smart_refctd_ptr(core::smart_refctd_ptr(m_device), scan_workgroup_size); #endif + + return core::smart_refctd_ptr(new IUtilities(std::move(device), std::move(logger), std::move(defaultUploadBuffer), std::move(defaultDownloadBuffer), allocationAlignment, allocationAlignmentForBufferImageCopy), core::dont_grab); + } inline ~IUtilities() @@ -762,12 +798,15 @@ class NBL_API2 IUtilities : public core::IReferenceCounted return retval; } - core::smart_refctd_ptr m_device; + nbl::system::logger_opt_smart_ptr m_logger; core::smart_refctd_ptr > m_defaultDownloadBuffer; core::smart_refctd_ptr > m_defaultUploadBuffer; - + + uint32_t m_allocationAlignment = 0u; + uint32_t m_allocationAlignmentForBufferImageCopy = 0u; + #if 0 // TODO: port core::smart_refctd_ptr m_propertyPoolHandler; core::smart_refctd_ptr m_scanner; From 6f258bbe57c274cbf1e06cc71aedb8c8d7201869 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Mon, 9 Jun 2025 12:39:09 +0400 Subject: [PATCH 75/83] IUtilities constructor to static create function --- examples_tests | 2 +- .../nbl/application_templates/BasicMultiQueueApplication.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples_tests b/examples_tests index d1a4e8e8e7..47dec6df8d 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit d1a4e8e8e7f21390a7d817bc0bf7f2d984ac4253 +Subproject commit 47dec6df8d84c2e60e0f2df813aa32eedcea4ae7 diff --git a/include/nbl/application_templates/BasicMultiQueueApplication.hpp b/include/nbl/application_templates/BasicMultiQueueApplication.hpp index b4d9f1b843..b0a8f98cda 100644 --- a/include/nbl/application_templates/BasicMultiQueueApplication.hpp +++ b/include/nbl/application_templates/BasicMultiQueueApplication.hpp @@ -49,7 +49,7 @@ class BasicMultiQueueApplication : public virtual MonoDeviceApplication return false; using namespace core; - m_utils = make_smart_refctd_ptr(smart_refctd_ptr(m_device),smart_refctd_ptr(m_logger)); + m_utils = video::IUtilities::create(smart_refctd_ptr(m_device),smart_refctd_ptr(m_logger)); if (!m_utils) return logFail("Failed to create nbl::video::IUtilities!"); From bb6102752f81699d1bfbfadcede6bc085fbe6936 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Mon, 9 Jun 2025 14:39:18 +0400 Subject: [PATCH 76/83] updated examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 47dec6df8d..0777434437 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 47dec6df8d84c2e60e0f2df813aa32eedcea4ae7 +Subproject commit 07774344371d182cbcbc716928375cca29356521 From 8f4cec25651a8302fda0dc2c9272e3eefded2463 Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Thu, 12 Jun 2025 13:09:14 +0400 Subject: [PATCH 77/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 0777434437..307f7f9b6e 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 07774344371d182cbcbc716928375cca29356521 +Subproject commit 307f7f9b6e2c42737511eff831ad747cc5ba8de2 From d2eb531c75f248cbd29c24dda380835580f85f4c Mon Sep 17 00:00:00 2001 From: Erfan Ahmadi Date: Fri, 13 Jun 2025 14:05:20 +0400 Subject: [PATCH 78/83] update examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 307f7f9b6e..fbf674031e 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 307f7f9b6e2c42737511eff831ad747cc5ba8de2 +Subproject commit fbf674031e2f16b2ee79305094ad3a45b6051c6c From d305e9228d8ba11329ca2d4d392fd9b4faee6adb Mon Sep 17 00:00:00 2001 From: Przemek Date: Mon, 16 Jun 2025 16:49:01 +0200 Subject: [PATCH 79/83] Updated examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index fbf674031e..a7cfeeb63e 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit fbf674031e2f16b2ee79305094ad3a45b6051c6c +Subproject commit a7cfeeb63e7891912124ab1746150c768a5bbcc9 From 0cdf4c43961663bcdeede0feb18d64bc7fa1e7af Mon Sep 17 00:00:00 2001 From: Przemek Date: Mon, 16 Jun 2025 18:17:44 +0200 Subject: [PATCH 80/83] Updated examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index a7cfeeb63e..9f5da5ca6d 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit a7cfeeb63e7891912124ab1746150c768a5bbcc9 +Subproject commit 9f5da5ca6dea5871981f8b014acde070b7372917 From c453220931ceaa4e67b4ea06e37868e88bc09a57 Mon Sep 17 00:00:00 2001 From: Przemek Date: Tue, 17 Jun 2025 21:17:35 +0200 Subject: [PATCH 81/83] Updated examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 9f5da5ca6d..8df4f585c9 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 9f5da5ca6dea5871981f8b014acde070b7372917 +Subproject commit 8df4f585c92afc7a7541dd263b4dd13de2c6be6e From 3f8840dbccf7552da3e6064f9848c96b09e4fc20 Mon Sep 17 00:00:00 2001 From: Przemek Date: Sat, 28 Jun 2025 14:25:58 +0200 Subject: [PATCH 82/83] Updated examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 8df4f585c9..3a7b90d92c 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 8df4f585c92afc7a7541dd263b4dd13de2c6be6e +Subproject commit 3a7b90d92c98528880b81b338211779e8bd276db From 3560211e68ec0deae6671b382c29f5c7c86e6917 Mon Sep 17 00:00:00 2001 From: Przemek Date: Tue, 1 Jul 2025 17:38:20 +0200 Subject: [PATCH 83/83] Updated examples --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index 3a7b90d92c..050a2010a2 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 3a7b90d92c98528880b81b338211779e8bd276db +Subproject commit 050a2010a2aa89171d1f12d40c567c7348f2c9c4