MCPcopy Create free account
hub / github.com/gpujs/gpu.js / chooseKernel

Method chooseKernel

src/gpu.js:146–203  ·  view source on GitHub ↗

* Choose kernel type and save on .Kernel property of GPU

()

Source from the content-addressed store, hash-verified

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 }

Callers 1

constructorMethod · 0.95

Calls 1

isContextMatchMethod · 0.45

Tested by

no test coverage detected