* Choose kernel type and save on .Kernel property of GPU
()
| 144 | * Choose kernel type and save on .Kernel property of GPU |
| 145 | */ |
| 146 | chooseKernel() { |
| 147 | if (this.Kernel) return; |
| 148 | |
| 149 | /** |
| 150 | * |
| 151 | * @type {WebGLKernel|WebGL2Kernel|HeadlessGLKernel|CPUKernel} |
| 152 | */ |
| 153 | let Kernel = null; |
| 154 | |
| 155 | if (this.context) { |
| 156 | for (let i = 0; i < kernelOrder.length; i++) { |
| 157 | const ExternalKernel = kernelOrder[i]; |
| 158 | if (ExternalKernel.isContextMatch(this.context)) { |
| 159 | if (!ExternalKernel.isSupported) { |
| 160 | throw new Error(`Kernel type ${ExternalKernel.name} not supported`); |
| 161 | } |
| 162 | Kernel = ExternalKernel; |
| 163 | break; |
| 164 | } |
| 165 | } |
| 166 | if (Kernel === null) { |
| 167 | throw new Error('unknown Context'); |
| 168 | } |
| 169 | } else if (this.mode) { |
| 170 | if (this.mode in internalKernels) { |
| 171 | if (!validate || internalKernels[this.mode].isSupported) { |
| 172 | Kernel = internalKernels[this.mode]; |
| 173 | } |
| 174 | } else if (this.mode === 'gpu') { |
| 175 | for (let i = 0; i < kernelOrder.length; i++) { |
| 176 | if (kernelOrder[i].isSupported) { |
| 177 | Kernel = kernelOrder[i]; |
| 178 | break; |
| 179 | } |
| 180 | } |
| 181 | } else if (this.mode === 'cpu') { |
| 182 | Kernel = CPUKernel; |
| 183 | } |
| 184 | if (!Kernel) { |
| 185 | throw new Error(`A requested mode of "${this.mode}" and is not supported`); |
| 186 | } |
| 187 | } else { |
| 188 | for (let i = 0; i < kernelOrder.length; i++) { |
| 189 | if (kernelOrder[i].isSupported) { |
| 190 | Kernel = kernelOrder[i]; |
| 191 | break; |
| 192 | } |
| 193 | } |
| 194 | if (!Kernel) { |
| 195 | Kernel = CPUKernel; |
| 196 | } |
| 197 | } |
| 198 | |
| 199 | if (!this.mode) { |
| 200 | this.mode = Kernel.mode; |
| 201 | } |
| 202 | this.Kernel = Kernel; |
| 203 | } |
no test coverage detected