mirror of
https://github.com/gpujs/gpu.js.git
synced 2025-12-08 20:35:56 +00:00
Also: feat: Typescript typings feat: api cleanup and exports feat: removal of building for node, only browser
64 lines
1.5 KiB
JavaScript
64 lines
1.5 KiB
JavaScript
const { assert, skip, test, module: describe } = require('qunit');
|
|
const { GPU } = require('../../src');
|
|
|
|
describe('features: demo');
|
|
|
|
function demo(mode) {
|
|
const matrixSize = 6;
|
|
let a = new Array(matrixSize * matrixSize);
|
|
let b = new Array(matrixSize * matrixSize);
|
|
a = splitArray(fillArrayRandom(a), matrixSize);
|
|
b = splitArray(fillArrayRandom(b), matrixSize);
|
|
function fillArrayRandom(array) {
|
|
for(let i = 0; i < array.length; i++) {
|
|
array[i] = Math.random();
|
|
}
|
|
return array;
|
|
}
|
|
|
|
function splitArray(array, part) {
|
|
const result = [];
|
|
for(let i = 0; i < array.length; i += part) {
|
|
result.push(array.slice(i, i + part));
|
|
}
|
|
return result;
|
|
}
|
|
const gpu = new GPU({ mode });
|
|
const multiplyMatrix = gpu.createKernel(function(a, b) {
|
|
let sum = 0;
|
|
for (let i = 0; i < 6; i++) {
|
|
sum += a[this.thread.y][i] * b[i][this.thread.x];
|
|
}
|
|
return sum;
|
|
})
|
|
.setOutput([6, 6]);
|
|
|
|
assert.ok( multiplyMatrix !== null, "function generated test");
|
|
assert.equal(multiplyMatrix(a, b).length, 6, "basic return function test");
|
|
gpu.destroy();
|
|
}
|
|
|
|
test("auto", () => {
|
|
demo();
|
|
});
|
|
|
|
test("gpu", () => {
|
|
demo('gpu');
|
|
});
|
|
|
|
(GPU.isWebGLSupported ? test : skip)("webgl", function () {
|
|
demo('webgl');
|
|
});
|
|
|
|
(GPU.isWebGL2Supported ? test : skip)("webgl2", function () {
|
|
demo('webgl2');
|
|
});
|
|
|
|
(GPU.isHeadlessGLSupported ? test : skip)("headlessgl", function () {
|
|
demo('headlessgl');
|
|
});
|
|
|
|
test("cpu", () => {
|
|
demo('cpu');
|
|
});
|