mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-18 09:25:25 +00:00
Add large buffer to handle super large data block commands
TerribleCommandBuffer has space for 10,000,000 bytes worth of commands. If commands contain super large data block (e.g. setsubdata), it will return nullptr and crash dawn wire layer. This patch adds a large buffer to handle super large data block. BUG=dawn:251 Change-Id: Ib007e92b5282afbb93aef63cfffe5a3965f6d5c1 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13040 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Austin Eng <enga@chromium.org> Commit-Queue: Corentin Wallez <cwallez@chromium.org>
This commit is contained in:
committed by
Commit Bot service account
parent
9b67273de9
commit
b639e68495
@@ -256,6 +256,25 @@ TEST_P(BufferSetSubDataTests, LargeSetSubData) {
|
||||
EXPECT_BUFFER_U32_RANGE_EQ(expectedData.data(), buffer, 0, kElements);
|
||||
}
|
||||
|
||||
// Test using SetSubData for super large data block
|
||||
TEST_P(BufferSetSubDataTests, SuperLargeSetSubData) {
|
||||
constexpr uint64_t kSize = 12000 * 1000;
|
||||
constexpr uint64_t kElements = 3000 * 1000;
|
||||
wgpu::BufferDescriptor descriptor;
|
||||
descriptor.size = kSize;
|
||||
descriptor.usage = wgpu::BufferUsage::CopySrc | wgpu::BufferUsage::CopyDst;
|
||||
wgpu::Buffer buffer = device.CreateBuffer(&descriptor);
|
||||
|
||||
std::vector<uint32_t> expectedData;
|
||||
for (uint32_t i = 0; i < kElements; ++i) {
|
||||
expectedData.push_back(i);
|
||||
}
|
||||
|
||||
buffer.SetSubData(0, kElements * sizeof(uint32_t), expectedData.data());
|
||||
|
||||
EXPECT_BUFFER_U32_RANGE_EQ(expectedData.data(), buffer, 0, kElements);
|
||||
}
|
||||
|
||||
DAWN_INSTANTIATE_TEST(BufferSetSubDataTests,
|
||||
D3D12Backend,
|
||||
MetalBackend,
|
||||
|
||||
Reference in New Issue
Block a user