Giovanni Mascellani (@giomasce) commented about libs/vkd3d/resource.c:
-/* Objects are cached so that vkd3d_view_incref() can safely check the refcount
- of an object freed by another thread. */
+#define HEAD_INDEX_MASK (ARRAY_SIZE(cache->heads) - 1)
+/* Objects are cached so that vkd3d_view_incref() can safely check the refcount of an
- object freed by another thread. This could be implemented as a single atomic linked
- list, but it requires handling the ABA problem, which brings issues with cross-platform
- support, compiler support, and non-universal x86-64 support for 128-bit CAS. */
static void *vkd3d_desc_object_cache_get(struct vkd3d_desc_object_cache *cache) { union d3d12_desc_object u;
- void *next;
- unsigned int i;
- do
- STATIC_ASSERT(!(ARRAY_SIZE(cache->heads) & HEAD_INDEX_MASK));
I guess this assertion belongs to just after the definition of `HEAD_INDEX_MASK`.