blob: e6380ac7ef5d028ab3ee673536826603e703f67a [file] [log] [blame]
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());
};
}