34 lines
996 B
JavaScript
34 lines
996 B
JavaScript
let capabilityPromise;
|
|
|
|
export function detectWebGpuCapability() {
|
|
capabilityPromise ??= detect();
|
|
return capabilityPromise;
|
|
}
|
|
|
|
async function detect() {
|
|
if (!navigator.gpu) {
|
|
return { available: false, label: "CPU fallback", detail: "WebGPU API 없음" };
|
|
}
|
|
try {
|
|
const adapter = await navigator.gpu.requestAdapter({ powerPreference: "high-performance" });
|
|
if (!adapter) {
|
|
return { available: false, label: "CPU fallback", detail: "WebGPU adapter 없음" };
|
|
}
|
|
const info = adapter.info;
|
|
const adapterName = [info?.vendor, info?.architecture || info?.device]
|
|
.filter(Boolean)
|
|
.join(" · ");
|
|
return {
|
|
available: true,
|
|
label: adapterName ? `WebGPU · ${adapterName}` : "WebGPU adapter 준비됨",
|
|
detail: adapterName || "WebGPU adapter 준비됨",
|
|
};
|
|
} catch (error) {
|
|
return {
|
|
available: false,
|
|
label: "CPU fallback",
|
|
detail: error instanceof Error ? error.message : String(error),
|
|
};
|
|
}
|
|
}
|