| import { GPUTest } from '../gpu_test.js'; |
| |
| /** |
| * Helper to exhaust VRAM until there is less than 64 MB of capacity. Returns |
| * an opaque closure which can be called to free the allocated resources later. |
| */ |
| export async function exhaustVramUntilUnder64MB(t: GPUTest) { |
| const allocateUntilOom = async (device: GPUDevice, size: number) => { |
| const buffers = []; |
| for (;;) { |
| device.pushErrorScope('out-of-memory'); |
| const buffer = t.createBufferTracked({ size, usage: GPUBufferUsage.STORAGE }); |
| if (await device.popErrorScope()) { |
| return buffers; |
| } |
| buffers.push(buffer); |
| } |
| }; |
| |
| const kLargeChunkSize = 512 * 1024 * 1024; |
| const kSmallChunkSize = 64 * 1024 * 1024; |
| const buffers = await allocateUntilOom(t.device, kLargeChunkSize); |
| buffers.push(...(await allocateUntilOom(t.device, kSmallChunkSize))); |
| return () => { |
| buffers.forEach(buffer => buffer.destroy()); |
| }; |
| } |