{"record":{"id":"27a5c2e15644f9e3","repo":"BabylonJS/Babylon.js","slug":"gpu-particle-system-is-not-supported","errorCode":null,"errorMessage":"GPU Particle System is not supported.","messagePattern":"GPU Particle System is not supported\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/dev/inspector-v2/src/extensions/quickCreate/particles.tsx","lineNumber":52,"sourceCode":"    // Node Particle System state\n    const [nodeParticleSystemName, setNodeParticleSystemName] = useState(\"Node Particle System\");\n    const [nodeParticleSystemSnippetId, setNodeParticleSystemSnippetId] = useState(\"\");\n\n    const handleCreateCPUAsync = async () => {\n        return await new Promise<{ name: string }>((resolve) => {\n            setTimeout(() => {\n                const system = new ParticleSystem(cpuParticleSystemName, cpuParticleSystemCapacity, scene);\n                system.particleTexture = new Texture(\"https://assets.babylonjs.com/textures/flare.png\", scene);\n                system.start();\n                resolve(system);\n            }, 0);\n        });\n    };\n\n    const handleCreateGPUAsync = async () => {\n        if (!GPUParticleSystem.IsSupported) {\n            alert(\"GPU Particle System is not supported.\");\n            throw new Error(\"GPU Particle System is not supported.\");\n        }\n        return await new Promise<{ name: string }>((resolve) => {\n            setTimeout(() => {\n                const system = new GPUParticleSystem(gpuParticleSystemName, { capacity: gpuParticleSystemCapacity }, scene);\n                system.particleTexture = new Texture(\"https://assets.babylonjs.com/textures/flare.png\", scene);\n                system.start();\n                resolve(system);\n            }, 0);\n        });\n    };\n\n    const handleCreateNodeAsync = async () => {\n        let nodeParticleSet;\n        const snippetId = nodeParticleSystemSnippetId.trim();\n        if (snippetId) {\n            nodeParticleSet = await NodeParticleSystemSet.ParseFromSnippetAsync(snippetId);\n            nodeParticleSet.name = nodeParticleSystemName;\n        } else {","sourceCodeStart":34,"sourceCodeEnd":70,"githubUrl":"https://github.com/BabylonJS/Babylon.js/blob/0592b347b8a4ee0236089ea86a749cacfdb266d8/packages/dev/inspector-v2/src/extensions/quickCreate/particles.tsx#L34-L70","documentation":"GPUParticleSystem in Babylon.js requires WebGPU (or fallback GPU compute) support in the host environment. The quick-create extension checks the static GPUParticleSystem.IsSupported flag before constructing the system, alerts the user, and throws because it cannot create the requested GPU particle system. The error is intentional: silently falling back to a CPU system would change behavior the user explicitly asked for.","triggerScenarios":"Clicking the GPU particle system quick-create action in the inspector while the page runs on a browser or device where GPUParticleSystem.IsSupported is false (no WebGPU, disabled feature, unsupported driver).","commonSituations":"Running the inspector in Safari or an older browser without WebGPU; testing on machines where WebGPU is disabled via flags or corporate policy; headless/CI environments with no GPU adapter; using a Babylon.js engine not initialized with WebGPU support.","solutions":["Open the inspector in a WebGPU-capable browser (Chrome/Edge 113+, recent Safari with WebGPU enabled) with hardware acceleration on.","Create a regular (CPU) ParticleSystem instead when GPUParticleSystem.IsSupported is false.","Check GPUParticleSystem.IsSupported in your UI and hide/disable the GPU option when false.","Ensure the engine is created with WebGPU (e.g. WebGPUEngine) so the feature is available at runtime."],"exampleFix":"// before\nconst handleCreateGPUAsync = async () => {\n  const system = new GPUParticleSystem(name, { capacity }, scene);\n  ...\n};\n\n// after\nconst handleCreateGPUAsync = async () => {\n  if (!GPUParticleSystem.IsSupported) {\n    const system = new ParticleSystem(name, capacity, scene); // CPU fallback\n    system.particleTexture = new Texture(\"https://assets.babylonjs.com/textures/flare.png\", scene);\n    system.start();\n    return { name };\n  }\n  ...\n};","handlingStrategy":"fallback","validationCode":"if (!GPUParticleSystem.IsSupported) {\n  console.warn(\"GPU particles unsupported, falling back to CPU ParticleSystem\");\n}","typeGuard":"function canCreateGPUParticles(): boolean {\n  return typeof GPUParticleSystem !== \"undefined\" && GPUParticleSystem.IsSupported;\n}","tryCatchPattern":"try {\n  return await handleCreateGPUAsync();\n} catch (e) {\n  if (e instanceof Error && e.message.includes(\"GPU Particle System is not supported\")) {\n    return createCPUParticleSystemFallback(scene);\n  }\n  throw e;\n}","preventionTips":["Feature-detect GPUParticleSystem.IsSupported before offering the GPU option in UI.","Test the inspector in browsers without WebGPU.","Initialize the engine with WebGPU support when GPU particles are required.","Surface the alert to users instead of only console errors."],"tags":["webgpu","particles","browser-compatibility"],"backgroundTag":"gpu-feature-unsupported","analyzedSha":"0592b347b8a4ee0236089ea86a749cacfdb266d8","analyzedAt":"2026-08-30T15:11:20.442Z","schemaVersion":2},"datasetVersion":"2026-08-30T18:17:15.746Z"}