From 4b1a4518042eefead14bb1afe869a8a4243bdeae Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Fri, 6 Aug 2021 11:24:46 -0700 Subject: [PATCH] fix VariantList type There was a confusion on utils::bitset<> API, it specifies the number of words to use, not then number of bits in the set. VariantList was sized to store 8192 bits instead of 128. --- filament/src/details/Material.h | 2 -- libs/filabridge/include/private/filament/Variant.h | 5 +++-- libs/utils/include/utils/bitset.h | 8 ++++++++ 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/filament/src/details/Material.h b/filament/src/details/Material.h index b62dd95f06..b75ecfefee 100644 --- a/filament/src/details/Material.h +++ b/filament/src/details/Material.h @@ -151,8 +151,6 @@ public: static void onEditCallback(void* userdata, const utils::CString& name, const void* packageData, size_t packageSize); - using VariantList = utils::bitset; - /** * Returns a list of "active" variants. * diff --git a/libs/filabridge/include/private/filament/Variant.h b/libs/filabridge/include/private/filament/Variant.h index c965fd9735..ba7aca115f 100644 --- a/libs/filabridge/include/private/filament/Variant.h +++ b/libs/filabridge/include/private/filament/Variant.h @@ -23,9 +23,10 @@ #include namespace filament { - static constexpr size_t VARIANT_COUNT = 128; + static constexpr size_t VARIANT_BITS = 7; + static constexpr size_t VARIANT_COUNT = 1 << VARIANT_BITS; - using VariantList = utils::bitset; + using VariantList = utils::bitset; // IMPORTANT: update filterVariant() when adding more variants // Also be sure to update formatVariantString inside CommonWriter.cpp diff --git a/libs/utils/include/utils/bitset.h b/libs/utils/include/utils/bitset.h index 221f7a8cd7..45112cec93 100644 --- a/libs/utils/include/utils/bitset.h +++ b/libs/utils/include/utils/bitset.h @@ -19,6 +19,7 @@ #include #include +#include #include #include @@ -59,10 +60,12 @@ public: } T getBitsAt(size_t n) const noexcept { + assert_invariant(n