Przeglądaj źródła

[Android] Fix some serialization, networking, and shader compilation issues (#9311)

* [Android] Fix deserialization errors for assets stored as object stream.
On Android and Linux, int64_t and unit64_t map to long and unsigned
long. This is different from other platforms. The AZ::s64 and AZ::u64
types are mapped to the correct type for 64-bit integrals based on
platform. Using int64_t and uint64_t results in the serialization system
using different uuid on different platforms. Android assets are built on
Windows. So an asset using one of those types that was serialized on
Windows will not deserialize correctly on Android.

Signed-off-by: amzn-sj <[email protected]>

* [Android] Call to epoll_wait causes the main thread to never wake up unless broken into on a debugger and resumed again. This ends up being required every frame.

Signed-off-by: amzn-sj <[email protected]>

* The unique-idx parameter is needed on Android as well because we need to bind resources to unique register indices on Android. The namespace parameter is required for graphics library specific attributes.

Signed-off-by: amzn-sj <[email protected]>

* Add comment explaing issue

Signed-off-by: amzn-sj <[email protected]>

* Change DrawItemSortKey to AZ::s64 instead of just fixing the serialization issue.

Signed-off-by: amzn-sj <[email protected]>

* Fix Linux build error

Signed-off-by: amzn-sj <[email protected]>

* Fix more Linux build errors

Signed-off-by: amzn-sj <[email protected]>

* Fix failing Linux tests

Signed-off-by: amzn-sj <[email protected]>
amzn-sj 3 lat temu
rodzic
commit
3f37ff799f

+ 8 - 8
Code/Framework/AzFramework/AzFramework/Spawnable/SpawnableMetaData.cpp

@@ -38,12 +38,12 @@ namespace AzFramework
         return GetGeneric(GetKeyHash(key), value);
     }
 
-    bool SpawnableMetaData::Get(AZStd::string_view key, uint64_t& value) const
+    bool SpawnableMetaData::Get(AZStd::string_view key, AZ::u64& value) const
     {
         return GetGeneric(GetKeyHash(key), value);
     }
 
-    bool SpawnableMetaData::Get(AZStd::string_view key, int64_t& value) const
+    bool SpawnableMetaData::Get(AZStd::string_view key, AZ::s64& value) const
     {
         return GetGeneric(GetKeyHash(key), value);
     }
@@ -68,12 +68,12 @@ namespace AzFramework
         return GetGeneric(GetKeyHash(arrayKey, index), value);
     }
 
-    bool SpawnableMetaData::Get(AZStd::string_view arrayKey, uint64_t index, uint64_t& value) const
+    bool SpawnableMetaData::Get(AZStd::string_view arrayKey, uint64_t index, AZ::u64& value) const
     {
         return GetGeneric(GetKeyHash(arrayKey, index), value);
     }
 
-    bool SpawnableMetaData::Get(AZStd::string_view arrayKey, uint64_t index, int64_t& value) const
+    bool SpawnableMetaData::Get(AZStd::string_view arrayKey, uint64_t index, AZ::s64& value) const
     {
         return GetGeneric(GetKeyHash(arrayKey, index), value);
     }
@@ -93,12 +93,12 @@ namespace AzFramework
         return GetGeneric(GetKeyHash(arrayKey, index), value);
     }
 
-    bool SpawnableMetaData::Get(AZStd::string_view arrayKey, SpawnableMetaDataArrayIndex index, uint64_t& value) const
+    bool SpawnableMetaData::Get(AZStd::string_view arrayKey, SpawnableMetaDataArrayIndex index, AZ::u64& value) const
     {
         return GetGeneric(GetKeyHash(arrayKey, index), value);
     }
 
-    bool SpawnableMetaData::Get(AZStd::string_view arrayKey, SpawnableMetaDataArrayIndex index, int64_t& value) const
+    bool SpawnableMetaData::Get(AZStd::string_view arrayKey, SpawnableMetaDataArrayIndex index, AZ::s64& value) const
     {
         return GetGeneric(GetKeyHash(arrayKey, index), value);
     }
@@ -193,8 +193,8 @@ namespace AzFramework
             {
                 using Key = AZStd::decay_t<decltype(args)>;
                      if constexpr (AZStd::is_same_v<Key, bool>)         { return ValueType::Boolean; }
-                else if constexpr (AZStd::is_same_v<Key, uint64_t>)     { return ValueType::UnsignedInteger; }
-                else if constexpr (AZStd::is_same_v<Key, int64_t>)      { return ValueType::SignedInteger; }
+                else if constexpr (AZStd::is_same_v<Key, AZ::u64>)     { return ValueType::UnsignedInteger; }
+                else if constexpr (AZStd::is_same_v<Key, AZ::s64>)      { return ValueType::SignedInteger; }
                 else if constexpr (AZStd::is_same_v<Key, double>)       { return ValueType::FloatingPoint; }
                 else if constexpr (AZStd::is_same_v<Key, AZStd::string>){ return ValueType::String; }
                 else if constexpr (AZStd::is_same_v<Key, SpawnableMetaDataArraySize>)

+ 7 - 7
Code/Framework/AzFramework/AzFramework/Spawnable/SpawnableMetaData.h

@@ -34,7 +34,7 @@ namespace AzFramework
         static inline constexpr uint64_t ArrayKeyRoot = 146223222818353; // Random prime number
 
         using TableKey = AZ::HashValue64;
-        using TableValue = AZStd::variant<bool, uint64_t, int64_t, double, AZStd::string, SpawnableMetaDataArraySize>;
+        using TableValue = AZStd::variant<bool, AZ::u64, AZ::s64, double, AZStd::string, SpawnableMetaDataArraySize>;
         using TableEntry = AZStd::pair<TableKey, TableValue>;
         using Table = AZStd::vector<TableEntry>;
 
@@ -56,21 +56,21 @@ namespace AzFramework
         explicit SpawnableMetaData(Table table);
 
         bool Get(AZStd::string_view key, bool& value) const;
-        bool Get(AZStd::string_view key, uint64_t& value) const;
-        bool Get(AZStd::string_view key, int64_t& value) const;
+        bool Get(AZStd::string_view key, AZ::u64& value) const;
+        bool Get(AZStd::string_view key, AZ::s64& value) const;
         bool Get(AZStd::string_view key, double& value) const;
         bool Get(AZStd::string_view key, AZStd::string_view& value) const;
         bool Get(AZStd::string_view key, SpawnableMetaDataArraySize& value) const;
 
         bool Get(AZStd::string_view arrayKey, uint64_t index, bool& value) const;
-        bool Get(AZStd::string_view arrayKey, uint64_t index, uint64_t& value) const;
-        bool Get(AZStd::string_view arrayKey, uint64_t index, int64_t& value) const;
+        bool Get(AZStd::string_view arrayKey, uint64_t index, AZ::u64& value) const;
+        bool Get(AZStd::string_view arrayKey, uint64_t index, AZ::s64& value) const;
         bool Get(AZStd::string_view arrayKey, uint64_t index, double& value) const;
         bool Get(AZStd::string_view arrayKey, uint64_t index, AZStd::string_view& value) const;
 
         bool Get(AZStd::string_view arrayKey, SpawnableMetaDataArrayIndex index, bool& value) const;
-        bool Get(AZStd::string_view arrayKey, SpawnableMetaDataArrayIndex index, uint64_t& value) const;
-        bool Get(AZStd::string_view arrayKey, SpawnableMetaDataArrayIndex index, int64_t& value) const;
+        bool Get(AZStd::string_view arrayKey, SpawnableMetaDataArrayIndex index, AZ::u64& value) const;
+        bool Get(AZStd::string_view arrayKey, SpawnableMetaDataArrayIndex index, AZ::s64& value) const;
         bool Get(AZStd::string_view arrayKey, SpawnableMetaDataArrayIndex index, double& value) const;
         bool Get(AZStd::string_view arrayKey, SpawnableMetaDataArrayIndex index, AZStd::string_view& value) const;
 

+ 3 - 3
Code/Framework/AzNetworking/Platform/Android/AzNetworking/AzNetworking_Traits_Platform.h

@@ -10,8 +10,8 @@
 
 #define AZ_TRAIT_OS_USE_WINSOCK 0
 #define AZ_TRAIT_OS_USE_MACH 0
-#define AZ_TRAIT_USE_SOCKET_SERVER_EPOLL 1
-#define AZ_TRAIT_USE_SOCKET_SERVER_SELECT 0
-#define AZ_TRAIT_USE_OPENSSL 0
+#define AZ_TRAIT_USE_SOCKET_SERVER_EPOLL 0
+#define AZ_TRAIT_USE_SOCKET_SERVER_SELECT 1
+#define AZ_TRAIT_USE_OPENSSL 1
 #define AZ_TRAIT_NEEDS_HTONLL 1
 

+ 4 - 4
Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Spawnable/SpawnableMetaDataBuilder.cpp

@@ -17,12 +17,12 @@ namespace AzToolsFramework::Prefab::PrefabConversionUtils
         return AddGeneric(key, value);
     }
 
-    SpawnableMetaDataBuilder& SpawnableMetaDataBuilder::Add(AZStd::string_view key, uint64_t value)
+    SpawnableMetaDataBuilder& SpawnableMetaDataBuilder::Add(AZStd::string_view key, AZ::u64 value)
     {
         return AddGeneric(key, value);
     }
 
-    SpawnableMetaDataBuilder& SpawnableMetaDataBuilder::Add(AZStd::string_view key, int64_t value)
+    SpawnableMetaDataBuilder& SpawnableMetaDataBuilder::Add(AZStd::string_view key, AZ::s64 value)
     {
         return AddGeneric(key, value);
     }
@@ -42,12 +42,12 @@ namespace AzToolsFramework::Prefab::PrefabConversionUtils
         return AppendArrayGeneric(arrayKey, value);
     }
 
-    SpawnableMetaDataBuilder& SpawnableMetaDataBuilder::AppendArray(AZStd::string_view arrayKey, uint64_t value)
+    SpawnableMetaDataBuilder& SpawnableMetaDataBuilder::AppendArray(AZStd::string_view arrayKey, AZ::u64 value)
     {
         return AppendArrayGeneric(arrayKey, value);
     }
 
-    SpawnableMetaDataBuilder& SpawnableMetaDataBuilder::AppendArray(AZStd::string_view arrayKey, int64_t value)
+    SpawnableMetaDataBuilder& SpawnableMetaDataBuilder::AppendArray(AZStd::string_view arrayKey, AZ::s64 value)
     {
         return AppendArrayGeneric(arrayKey, value);
     }

+ 4 - 4
Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Spawnable/SpawnableMetaDataBuilder.h

@@ -18,14 +18,14 @@ namespace AzToolsFramework::Prefab::PrefabConversionUtils
     {
     public:
         SpawnableMetaDataBuilder& Add(AZStd::string_view key, bool value);
-        SpawnableMetaDataBuilder& Add(AZStd::string_view key, uint64_t value);
-        SpawnableMetaDataBuilder& Add(AZStd::string_view key, int64_t value);
+        SpawnableMetaDataBuilder& Add(AZStd::string_view key, AZ::u64 value);
+        SpawnableMetaDataBuilder& Add(AZStd::string_view key, AZ::s64 value);
         SpawnableMetaDataBuilder& Add(AZStd::string_view key, double value);
         SpawnableMetaDataBuilder& Add(AZStd::string_view key, AZStd::string value);
 
         SpawnableMetaDataBuilder& AppendArray(AZStd::string_view arrayKey, bool value);
-        SpawnableMetaDataBuilder& AppendArray(AZStd::string_view arrayKey, uint64_t value);
-        SpawnableMetaDataBuilder& AppendArray(AZStd::string_view arrayKey, int64_t value);
+        SpawnableMetaDataBuilder& AppendArray(AZStd::string_view arrayKey, AZ::u64 value);
+        SpawnableMetaDataBuilder& AppendArray(AZStd::string_view arrayKey, AZ::s64 value);
         SpawnableMetaDataBuilder& AppendArray(AZStd::string_view arrayKey, double value);
         SpawnableMetaDataBuilder& AppendArray(AZStd::string_view arrayKey, AZStd::string value);
 

+ 41 - 41
Code/Framework/AzToolsFramework/Tests/Prefab/Spawnable/SpawnableMetaDataTests.cpp

@@ -30,11 +30,11 @@ namespace UnitTest
             {
                 return true;
             }
-            else if constexpr(AZStd::is_same_v<SetType, uint64_t>)
+            else if constexpr(AZStd::is_same_v<SetType, AZ::u64>)
             {
                 return 42;
             }
-            else if constexpr(AZStd::is_same_v<SetType, int64_t>)
+            else if constexpr(AZStd::is_same_v<SetType, AZ::s64>)
             {
                 return -42;
             }
@@ -54,11 +54,11 @@ namespace UnitTest
             {
                 return AzFramework::SpawnableMetaData::ValueType::Boolean;
             }
-            else if constexpr (AZStd::is_same_v<SetType, uint64_t>)
+            else if constexpr (AZStd::is_same_v<SetType, AZ::u64>)
             {
                 return AzFramework::SpawnableMetaData::ValueType::UnsignedInteger;
             }
-            else if constexpr (AZStd::is_same_v<SetType, int64_t>)
+            else if constexpr (AZStd::is_same_v<SetType, AZ::s64>)
             {
                 return AzFramework::SpawnableMetaData::ValueType::SignedInteger;
             }
@@ -139,8 +139,8 @@ namespace UnitTest
     {
         AzToolsFramework::Prefab::PrefabConversionUtils::SpawnableMetaDataBuilder builder;
         builder.AppendArray("RandomKey", true);
-        builder.AppendArray("RandomKey", uint64_t{ 42 });
-        builder.AppendArray("RandomKey", int64_t{ -42 });
+        builder.AppendArray("RandomKey", AZ::u64{ 42 });
+        builder.AppendArray("RandomKey", AZ::s64{ -42 });
         builder.AppendArray("RandomKey", 42.0);
         builder.AppendArray("RandomKey", "Hello");
         ASSERT_EQ(6, builder.GetEntryCount()); // 5 entries plus the entry that holds the array size.
@@ -241,18 +241,18 @@ namespace UnitTest
         AppendArray_ReplaceExistingValue_ArraySizeReplacesOriginalEntry,
         Get_WrongType_ReturnsFalse);
 
-    using SpawnableMetaDataTestTypes = ::testing::Types<bool, uint64_t, int64_t, double, AZStd::string>;
+    using SpawnableMetaDataTestTypes = ::testing::Types<bool, AZ::u64, AZ::s64, double, AZStd::string>;
     INSTANTIATE_TYPED_TEST_CASE_P(SpawnableMetaDataTests, TypedSpawnableMetaDataTests, SpawnableMetaDataTestTypes);
 
 
     TEST_F(SpawnableMetaDataTests, Get_UnknownKey_ReturnsFalse)
     {
         AzToolsFramework::Prefab::PrefabConversionUtils::SpawnableMetaDataBuilder builder;
-        builder.Add("RandomKey", uint64_t{ 42 });
+        builder.Add("RandomKey", AZ::u64{ 42 });
 
         AzFramework::SpawnableMetaData metaData(builder.BuildMetaData());
 
-        uint64_t stored{};
+        AZ::u64 stored{};
         EXPECT_FALSE(metaData.Get("UnknownKey", stored));
     }
 
@@ -260,8 +260,8 @@ namespace UnitTest
     {
         AzToolsFramework::Prefab::PrefabConversionUtils::SpawnableMetaDataBuilder builder;
         builder.AppendArray("RandomKey", true);
-        builder.AppendArray("RandomKey", uint64_t{ 42 });
-        builder.AppendArray("RandomKey", int64_t{ -42 });
+        builder.AppendArray("RandomKey", AZ::u64{ 42 });
+        builder.AppendArray("RandomKey", AZ::s64{ -42 });
         builder.AppendArray("RandomKey", 42.0);
         builder.AppendArray("RandomKey", "Hello");
 
@@ -275,7 +275,7 @@ namespace UnitTest
     TEST_F(SpawnableMetaDataTests, Get_ArrayElementsAtVariousIndices_ReturnsValues)
     {
         AzToolsFramework::Prefab::PrefabConversionUtils::SpawnableMetaDataBuilder builder;
-        for (uint64_t i = 42; i < 88; ++i)
+        for (AZ::u64 i = 42; i < 88; ++i)
         {
             builder.AppendArray("RandomKey", i);
         }
@@ -284,7 +284,7 @@ namespace UnitTest
 
         for (size_t i = 0; i < 88 - 42; ++i)
         {
-            uint64_t stored;
+            AZ::u64 stored;
             EXPECT_TRUE(metaData.Get("RandomKey", i, stored));
             EXPECT_EQ(42 + i, stored);
         }
@@ -294,14 +294,14 @@ namespace UnitTest
     {
         AzToolsFramework::Prefab::PrefabConversionUtils::SpawnableMetaDataBuilder builder;
         builder.AppendArray("RandomKey", true);
-        builder.AppendArray("RandomKey", uint64_t{ 42 });
-        builder.AppendArray("RandomKey", int64_t{ -42 });
+        builder.AppendArray("RandomKey", AZ::u64{ 42 });
+        builder.AppendArray("RandomKey", AZ::s64{ -42 });
         builder.AppendArray("RandomKey", 42.0);
         builder.AppendArray("RandomKey", "Hello");
 
         AzFramework::SpawnableMetaData metaData(builder.BuildMetaData());
 
-        uint64_t stored{};
+        AZ::u64 stored{};
         EXPECT_FALSE(metaData.Get("RandomKey", 5, stored));
     }
 
@@ -309,8 +309,8 @@ namespace UnitTest
     {
         AzToolsFramework::Prefab::PrefabConversionUtils::SpawnableMetaDataBuilder builder;
         builder.AppendArray("RandomKey", true);
-        builder.AppendArray("RandomKey", uint64_t{ 42 });
-        builder.AppendArray("RandomKey", int64_t{ -42 });
+        builder.AppendArray("RandomKey", AZ::u64{ 42 });
+        builder.AppendArray("RandomKey", AZ::s64{ -42 });
         builder.AppendArray("RandomKey", 42.0);
         builder.AppendArray("RandomKey", "Hello");
 
@@ -329,8 +329,8 @@ namespace UnitTest
     {
         AzToolsFramework::Prefab::PrefabConversionUtils::SpawnableMetaDataBuilder builder;
         builder.AppendArray("RandomKey", true);
-        builder.AppendArray("RandomKey", uint64_t{ 42 });
-        builder.AppendArray("RandomKey", int64_t{ -42 });
+        builder.AppendArray("RandomKey", AZ::u64{ 42 });
+        builder.AppendArray("RandomKey", AZ::s64{ -42 });
         builder.AppendArray("RandomKey", 42.0);
         builder.AppendArray("RandomKey", "Hello");
 
@@ -342,13 +342,13 @@ namespace UnitTest
     TEST_F(SpawnableMetaDataTests, Remove_RemoveExistingEntry_EntryNotFound)
     {
         AzToolsFramework::Prefab::PrefabConversionUtils::SpawnableMetaDataBuilder builder;
-        builder.Add("RandomKey", uint64_t{ 42 });
+        builder.Add("RandomKey", AZ::u64{ 42 });
 
         ASSERT_TRUE(builder.Remove("RandomKey"));
 
         AzFramework::SpawnableMetaData metaData(builder.BuildMetaData());
 
-        uint64_t stored{};
+        AZ::u64 stored{};
         EXPECT_FALSE(metaData.Get("RandomKey", stored));
     }
 
@@ -361,12 +361,12 @@ namespace UnitTest
     TEST_F(SpawnableMetaDataTests, Remove_RemoveArray_AllArrayEntriesAreRemovedAsWell)
     {
         AzToolsFramework::Prefab::PrefabConversionUtils::SpawnableMetaDataBuilder builder;
-        builder.AppendArray("RandomKey", uint64_t{ 10 });
-        builder.AppendArray("RandomKey", uint64_t{ 11 });
-        builder.AppendArray("RandomKey", uint64_t{ 12 });
-        builder.AppendArray("RandomKey", uint64_t{ 13 });
-        builder.AppendArray("RandomKey", uint64_t{ 14 });
-        builder.AppendArray("RandomKey", uint64_t{ 15 });
+        builder.AppendArray("RandomKey", AZ::u64{ 10 });
+        builder.AppendArray("RandomKey", AZ::u64{ 11 });
+        builder.AppendArray("RandomKey", AZ::u64{ 12 });
+        builder.AppendArray("RandomKey", AZ::u64{ 13 });
+        builder.AppendArray("RandomKey", AZ::u64{ 14 });
+        builder.AppendArray("RandomKey", AZ::u64{ 15 });
 
         EXPECT_TRUE(builder.Remove("RandomKey"));
 
@@ -376,12 +376,12 @@ namespace UnitTest
     TEST_F(SpawnableMetaDataTests, RemoveArrayEntry_RemoveExistingEntry_EntryNotFound)
     {
         AzToolsFramework::Prefab::PrefabConversionUtils::SpawnableMetaDataBuilder builder;
-        builder.AppendArray("RandomKey", uint64_t{ 10 });
-        builder.AppendArray("RandomKey", uint64_t{ 11 });
-        builder.AppendArray("RandomKey", uint64_t{ 12 });
-        builder.AppendArray("RandomKey", uint64_t{ 13 });
-        builder.AppendArray("RandomKey", uint64_t{ 14 });
-        builder.AppendArray("RandomKey", uint64_t{ 15 });
+        builder.AppendArray("RandomKey", AZ::u64{ 10 });
+        builder.AppendArray("RandomKey", AZ::u64{ 11 });
+        builder.AppendArray("RandomKey", AZ::u64{ 12 });
+        builder.AppendArray("RandomKey", AZ::u64{ 13 });
+        builder.AppendArray("RandomKey", AZ::u64{ 14 });
+        builder.AppendArray("RandomKey", AZ::u64{ 15 });
 
         ASSERT_TRUE(builder.RemoveArrayEntry("RandomKey", 3));
 
@@ -391,7 +391,7 @@ namespace UnitTest
         EXPECT_TRUE(metaData.Get("RandomKey", stored));
         EXPECT_EQ(stored, AzFramework::SpawnableMetaDataArraySize{ 5 });
 
-        uint64_t storedValue;
+        AZ::u64 storedValue;
         EXPECT_TRUE(metaData.Get("RandomKey", 0, storedValue));
         EXPECT_EQ(10, storedValue);
 
@@ -419,12 +419,12 @@ namespace UnitTest
     TEST_F(SpawnableMetaDataTests, RemoveArrayEntry_RemoveNonExistingEntry_ReturnFalse)
     {
         AzToolsFramework::Prefab::PrefabConversionUtils::SpawnableMetaDataBuilder builder;
-        builder.AppendArray("RandomKey", uint64_t{ 0 });
-        builder.AppendArray("RandomKey", uint64_t{ 1 });
-        builder.AppendArray("RandomKey", uint64_t{ 2 });
-        builder.AppendArray("RandomKey", uint64_t{ 3 });
-        builder.AppendArray("RandomKey", uint64_t{ 4 });
-        builder.AppendArray("RandomKey", uint64_t{ 5 });
+        builder.AppendArray("RandomKey", AZ::u64{ 0 });
+        builder.AppendArray("RandomKey", AZ::u64{ 1 });
+        builder.AppendArray("RandomKey", AZ::u64{ 2 });
+        builder.AppendArray("RandomKey", AZ::u64{ 3 });
+        builder.AppendArray("RandomKey", AZ::u64{ 4 });
+        builder.AppendArray("RandomKey", AZ::u64{ 5 });
 
         ASSERT_FALSE(builder.RemoveArrayEntry("RandomKey", 42));
     }

+ 3 - 1
Gems/Atom/Asset/Shader/Config/Platform/Android/shader_build_options.json

@@ -2,8 +2,10 @@
     "AddBuildArguments": {
         "debug": false,
         "preprocessor": [],
-        "azslc": ["--min-descriptors=80,8,8,-1,-1" //Sets,Spaces,Samplers,Textures,Buffers
+        "azslc": ["--namespace=vk"
+                , "--min-descriptors=80,8,8,-1,-1" //Sets,Spaces,Samplers,Textures,Buffers
                 , "--max-spaces=4"
+                , "--unique-idx"
         ],
         "dxc": ["-spirv"
               , "-fvk-use-dx-layout" // Use the same memory layout as DX12, otherwise some offset of constant may get wrong.

+ 1 - 1
Gems/Atom/RHI/Code/Include/Atom/RHI/DrawItem.h

@@ -151,7 +151,7 @@ namespace AZ
             const Viewport* m_viewports = nullptr;
         };
 
-        using DrawItemSortKey = int64_t;
+        using DrawItemSortKey = AZ::s64;
 
         // A filter associate to a DrawItem which can be used to filter the DrawItem when submitting to command list
         using DrawFilterTag = Handle<uint8_t, DefaultNamespaceType>;