mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-14 23:56:16 +00:00
D3D12: Bucket descriptor allocation by powers of two
WebGPU currently allows as many as 108 view descriptors per bind group. This is too many to have one descriptor allocator per size, so we need to bucket them by size. Bug: dawn:443, dawn:488 Change-Id: I4fc8cf7cd0dc8292bb6a8488fd2ceb7575e1e5f7 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/24787 Reviewed-by: Austin Eng <enga@chromium.org> Reviewed-by: Bryan Bernhart <bryan.bernhart@intel.com> Commit-Queue: Austin Eng <enga@chromium.org>
This commit is contained in:
committed by
Commit Bot service account
parent
e8e089ad28
commit
cb2938a1af
@@ -37,14 +37,61 @@ TEST(Math, Log2) {
|
||||
ASSERT_EQ(Log2(0xFFFFFFFFu), 31u);
|
||||
ASSERT_EQ(Log2(static_cast<uint64_t>(0xFFFFFFFFFFFFFFFF)), 63u);
|
||||
|
||||
static_assert(ConstexprLog2(1u) == 0u, "");
|
||||
static_assert(ConstexprLog2(0xFFFFFFFFu) == 31u, "");
|
||||
static_assert(ConstexprLog2(static_cast<uint64_t>(0xFFFFFFFFFFFFFFFF)) == 63u, "");
|
||||
|
||||
// Test boundary between two logs
|
||||
ASSERT_EQ(Log2(0x80000000u), 31u);
|
||||
ASSERT_EQ(Log2(0x7FFFFFFFu), 30u);
|
||||
ASSERT_EQ(Log2(static_cast<uint64_t>(0x8000000000000000)), 63u);
|
||||
ASSERT_EQ(Log2(static_cast<uint64_t>(0x7FFFFFFFFFFFFFFF)), 62u);
|
||||
|
||||
static_assert(ConstexprLog2(0x80000000u) == 31u, "");
|
||||
static_assert(ConstexprLog2(0x7FFFFFFFu) == 30u, "");
|
||||
static_assert(ConstexprLog2(static_cast<uint64_t>(0x8000000000000000)) == 63u, "");
|
||||
static_assert(ConstexprLog2(static_cast<uint64_t>(0x7FFFFFFFFFFFFFFF)) == 62u, "");
|
||||
|
||||
ASSERT_EQ(Log2(16u), 4u);
|
||||
ASSERT_EQ(Log2(15u), 3u);
|
||||
|
||||
static_assert(ConstexprLog2(16u) == 4u, "");
|
||||
static_assert(ConstexprLog2(15u) == 3u, "");
|
||||
}
|
||||
|
||||
// Tests for Log2Ceil
|
||||
TEST(Math, Log2Ceil) {
|
||||
// Test extrema
|
||||
ASSERT_EQ(Log2Ceil(1u), 0u);
|
||||
ASSERT_EQ(Log2Ceil(0xFFFFFFFFu), 32u);
|
||||
ASSERT_EQ(Log2Ceil(static_cast<uint64_t>(0xFFFFFFFFFFFFFFFF)), 64u);
|
||||
|
||||
static_assert(ConstexprLog2Ceil(1u) == 0u, "");
|
||||
static_assert(ConstexprLog2Ceil(0xFFFFFFFFu) == 32u, "");
|
||||
static_assert(ConstexprLog2Ceil(static_cast<uint64_t>(0xFFFFFFFFFFFFFFFF)) == 64u, "");
|
||||
|
||||
// Test boundary between two logs
|
||||
ASSERT_EQ(Log2Ceil(0x80000001u), 32u);
|
||||
ASSERT_EQ(Log2Ceil(0x80000000u), 31u);
|
||||
ASSERT_EQ(Log2Ceil(0x7FFFFFFFu), 31u);
|
||||
ASSERT_EQ(Log2Ceil(static_cast<uint64_t>(0x8000000000000001)), 64u);
|
||||
ASSERT_EQ(Log2Ceil(static_cast<uint64_t>(0x8000000000000000)), 63u);
|
||||
ASSERT_EQ(Log2Ceil(static_cast<uint64_t>(0x7FFFFFFFFFFFFFFF)), 63u);
|
||||
|
||||
static_assert(ConstexprLog2Ceil(0x80000001u) == 32u, "");
|
||||
static_assert(ConstexprLog2Ceil(0x80000000u) == 31u, "");
|
||||
static_assert(ConstexprLog2Ceil(0x7FFFFFFFu) == 31u, "");
|
||||
static_assert(ConstexprLog2Ceil(static_cast<uint64_t>(0x8000000000000001)) == 64u, "");
|
||||
static_assert(ConstexprLog2Ceil(static_cast<uint64_t>(0x8000000000000000)) == 63u, "");
|
||||
static_assert(ConstexprLog2Ceil(static_cast<uint64_t>(0x7FFFFFFFFFFFFFFF)) == 63u, "");
|
||||
|
||||
ASSERT_EQ(Log2Ceil(17u), 5u);
|
||||
ASSERT_EQ(Log2Ceil(16u), 4u);
|
||||
ASSERT_EQ(Log2Ceil(15u), 4u);
|
||||
|
||||
static_assert(ConstexprLog2Ceil(17u) == 5u, "");
|
||||
static_assert(ConstexprLog2Ceil(16u) == 4u, "");
|
||||
static_assert(ConstexprLog2Ceil(15u) == 4u, "");
|
||||
}
|
||||
|
||||
// Tests for IsPowerOfTwo
|
||||
|
||||
Reference in New Issue
Block a user