From f71a8343c3b4ea23eddf0cf35b9957a0b45b0cf3 Mon Sep 17 00:00:00 2001 From: Greggman Date: Fri, 8 Mar 2024 13:56:24 -0800 Subject: [PATCH] Fix device_pool refactor (#3469) The old version made one device with no descriptor. If that fail then it stopped creating any devices period. The previous refactor was bad in that if the any device failed it would just stop making devices. This one is simplified. It just used the pool as a pool. There is no special handling for failed devices. --- src/webgpu/util/device_pool.ts | 25 ++----------------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/src/webgpu/util/device_pool.ts b/src/webgpu/util/device_pool.ts index d0d1e6c0b6b5..8f734c75aec7 100644 --- a/src/webgpu/util/device_pool.ts +++ b/src/webgpu/util/device_pool.ts @@ -22,7 +22,7 @@ class FeaturesNotSupported extends Error {} export class TestOOMedShouldAttemptGC extends Error {} export class DevicePool { - private holders: 'uninitialized' | 'failed' | DescriptorToHolderMap = 'uninitialized'; + private holders = new DescriptorToHolderMap(); async requestAdapter(recorder: TestCaseRecorder) { const gpu = getGPU(recorder); @@ -36,28 +36,7 @@ export class DevicePool { adapter: GPUAdapter, descriptor?: UncanonicalizedDeviceDescriptor ): Promise { - let holder; - if (this.holders === 'uninitialized') { - this.holders = new DescriptorToHolderMap(); - } - - let errorMessage = ''; - if (this.holders !== 'failed') { - try { - holder = await this.holders.getOrCreate(adapter, descriptor); - } catch (ex) { - this.holders = 'failed'; - if (ex instanceof Error) { - errorMessage = ` with ${ex.name} "${ex.message}"`; - } - } - } - - assert( - this.holders !== 'failed', - `WebGPU device failed to initialize${errorMessage}; not retrying` - ); - assert(!!holder); + const holder = await this.holders.getOrCreate(adapter, descriptor); assert(holder.state === 'free', 'Device was in use on DevicePool.acquire'); holder.state = 'acquired'; holder.beginTestScope();