From afc7535fc6d0c8d06b7568c5935ce343aecffd77 Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Tue, 7 Jan 2025 14:33:28 -0800 Subject: [PATCH] Implement device lost promise property to handle loss gracefully by reinitializing. Adjust try-catch error logging message and just retry search instead of reinitializing class. --- src/lib/workers/powgpu.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/lib/workers/powgpu.ts b/src/lib/workers/powgpu.ts index 4105721..43b9359 100644 --- a/src/lib/workers/powgpu.ts +++ b/src/lib/workers/powgpu.ts @@ -408,6 +408,10 @@ export class PowGpu extends WorkerInterface { adapter.requestDevice() .then(device => { this.#device = device + this.#device.lost.then(loss => { + console.warn(`(${loss.reason}) ${loss.message}. Reinitializing device.`) + this.init() + }) // Create buffers for writing GPU calculations and reading from Javascript this.#uboBuffer = this.#device.createBuffer({ @@ -539,8 +543,7 @@ export class PowGpu extends WorkerInterface { await this.#cpuBuffer.mapAsync(GPUMapMode.READ) await this.#device.queue.onSubmittedWorkDone() } catch (err) { - console.warn(`Reinitializing after catching error ${err}`) - this.init() + console.warn(`Error getting data from GPU, retrying. ${err}`) return await this.search(hash, threshold) } const data = new DataView(this.#cpuBuffer.getMappedRange()) -- 2.34.1