gpu.js/test/features/dynamic-output.js
Robert Plummer cab4d033bc fix: Fix #512, upgrade gl-wiretap and fix some .toString()
Also fix default dynamicOutput = true, it should be false
Also add .DS_Store to .gitignore
Also update package-lock.json
Also fix some unit tests that deal with dynamic output
Also add `setDynamicOutput` and `setDynamicArguments` to typescript
Also fix issue where `uOutputDim` needs `Int32Array` in `.toString()`
Also added some spaces for `.toString()` to look more pretty
2019-10-02 21:34:20 -04:00

821 lines
22 KiB
JavaScript

const { assert, skip, test, module: describe, only } = require('qunit');
const { GPU } = require('../../src');
describe('features: dynamic output');
function dynamicOutput1DGrows(mode) {
const gpu = new GPU({ mode });
const kernel = gpu.createKernel(function() {
return this.output.x + this.thread.x;
}, { dynamicOutput: true });
kernel.setOutput([5]);
let result = kernel();
assert.equal(result.length, 5);
assert.deepEqual(Array.from(result), [5,6,7,8,9]);
assert.deepEqual(Array.from(kernel.output), [5]);
kernel.setOutput([10]);
result = kernel();
assert.equal(result.length, 10);
assert.deepEqual(Array.from(result), [10,11,12,13,14,15,16,17,18,19]);
assert.deepEqual(Array.from(kernel.output), [10]);
gpu.destroy();
}
test('dynamic output 1d grows auto', () => {
dynamicOutput1DGrows();
});
test('dynamic output 1d grows gpu', () => {
dynamicOutput1DGrows('gpu');
});
(GPU.isWebGLSupported ? test : skip)('dynamic output 1d grows webgl', () => {
dynamicOutput1DGrows('webgl');
});
(GPU.isWebGL2Supported ? test : skip)('dynamic output 1d grows webgl2', () => {
dynamicOutput1DGrows('webgl2');
});
(GPU.isHeadlessGLSupported ? test : skip)('dynamic output 1d grows headlessgl', () => {
dynamicOutput1DGrows('headlessgl');
});
test('dynamic output 1d grows cpu', () => {
dynamicOutput1DGrows('cpu');
});
function dynamicOutput1DShrinks(mode) {
const gpu = new GPU({ mode });
const kernel = gpu.createKernel(function() {
return this.output.x + this.thread.x;
}, { dynamicOutput: true });
kernel.setOutput([10]);
let result = kernel();
assert.equal(result.length, 10);
assert.deepEqual(Array.from(result), [10,11,12,13,14,15,16,17,18,19]);
assert.deepEqual(Array.from(kernel.output), [10]);
kernel.setOutput([5]);
result = kernel();
assert.equal(result.length, 5);
assert.deepEqual(Array.from(result), [5,6,7,8,9]);
assert.deepEqual(Array.from(kernel.output), [5]);
gpu.destroy();
}
test('dynamic output 1d shrinks auto', () => {
dynamicOutput1DShrinks();
});
test('dynamic output 1d shrinks gpu', () => {
dynamicOutput1DShrinks('gpu');
});
(GPU.isWebGLSupported ? test : skip)('dynamic output 1d shrinks webgl', () => {
dynamicOutput1DShrinks('webgl');
});
(GPU.isWebGL2Supported ? test : skip)('dynamic output 1d shrinks webgl2', () => {
dynamicOutput1DShrinks('webgl2');
});
(GPU.isHeadlessGLSupported ? test : skip)('dynamic output 1d shrinks headlessgl', () => {
dynamicOutput1DShrinks('headlessgl');
});
test('dynamic output 1d shrinks cpu', () => {
dynamicOutput1DShrinks('cpu');
});
function dynamicOutput1DKernelMapGrows(mode) {
const gpu = new GPU({ mode });
const kernel = gpu.createKernelMap({
result2: function map(v) {
return v;
}
}, function() {
return map(this.output.x + this.thread.x);
}, { dynamicOutput: true });
kernel.setOutput([5]);
let result = kernel();
assert.equal(result.result.length, 5);
assert.equal(result.result2.length, 5);
assert.deepEqual(Array.from(result.result), [5,6,7,8,9]);
assert.deepEqual(Array.from(result.result2), [5,6,7,8,9]);
assert.deepEqual(Array.from(kernel.output), [5]);
kernel.setOutput([10]);
result = kernel();
assert.equal(result.result.length, 10);
assert.equal(result.result2.length, 10);
assert.deepEqual(Array.from(result.result), [10,11,12,13,14,15,16,17,18,19]);
assert.deepEqual(Array.from(result.result2), [10,11,12,13,14,15,16,17,18,19]);
assert.deepEqual(Array.from(kernel.output), [10]);
gpu.destroy();
}
test('dynamic output 1d kernel map grows auto', () => {
dynamicOutput1DKernelMapGrows();
});
test('dynamic output 1d kernel map grows gpu', () => {
dynamicOutput1DKernelMapGrows('gpu');
});
(GPU.isWebGLSupported ? test : skip)('dynamic output 1d kernel map grows webgl', () => {
dynamicOutput1DKernelMapGrows('webgl');
});
(GPU.isWebGL2Supported ? test : skip)('dynamic output 1d kernel map grows webgl2', () => {
dynamicOutput1DKernelMapGrows('webgl2');
});
(GPU.isHeadlessGLSupported ? test : skip)('dynamic output 1d kernel map grows headlessgl', () => {
dynamicOutput1DKernelMapGrows('headlessgl');
});
test('dynamic output 1d kernel map grows cpu', () => {
dynamicOutput1DKernelMapGrows('cpu');
});
function dynamicOutput1DKernelMapShrinks(mode) {
const gpu = new GPU({ mode });
const kernel = gpu.createKernelMap({
result2: function map(v) {
return v;
}
}, function() {
return map(this.output.x + this.thread.x);
}, { dynamicOutput: true });
kernel.setOutput([10]);
let result = kernel();
assert.equal(result.result.length, 10);
assert.equal(result.result2.length, 10);
assert.deepEqual(Array.from(result.result), [10,11,12,13,14,15,16,17,18,19]);
assert.deepEqual(Array.from(result.result2), [10,11,12,13,14,15,16,17,18,19]);
assert.deepEqual(Array.from(kernel.output), [10]);
kernel.setOutput([5]);
result = kernel();
assert.equal(result.result.length, 5);
assert.equal(result.result2.length, 5);
assert.deepEqual(Array.from(result.result), [5,6,7,8,9]);
assert.deepEqual(Array.from(result.result2), [5,6,7,8,9]);
assert.deepEqual(Array.from(kernel.output), [5]);
gpu.destroy();
}
test('dynamic output 1d kernel map shrinks auto', () => {
dynamicOutput1DKernelMapShrinks();
});
test('dynamic output 1d kernel map shrinks gpu', () => {
dynamicOutput1DKernelMapShrinks('gpu');
});
(GPU.isWebGLSupported ? test : skip)('dynamic output 1d kernel map shrinks webgl', () => {
dynamicOutput1DKernelMapShrinks('webgl');
});
(GPU.isWebGL2Supported ? test : skip)('dynamic output 1d kernel map shrinks webgl2', () => {
dynamicOutput1DKernelMapShrinks('webgl2');
});
(GPU.isHeadlessGLSupported ? test : skip)('dynamic output 1d kernel map shrinks headlessgl', () => {
dynamicOutput1DKernelMapShrinks('headlessgl');
});
test('dynamic output 1d kernel map shrinks cpu', () => {
dynamicOutput1DKernelMapShrinks('cpu');
});
function dynamicOutput2DGrows(mode) {
const gpu = new GPU({ mode });
const kernel = gpu.createKernel(function() {
return this.output.x + this.output.y + this.thread.x + this.thread.y;
}, { dynamicOutput: true });
kernel.setOutput([2,2]);
let result = kernel();
assert.equal(result.length, 2);
assert.deepEqual(result.map(row => Array.from(row)), [[4,5],[5,6]]);
assert.deepEqual(Array.from(kernel.output), [2,2]);
kernel.setOutput([3,3]);
result = kernel();
assert.equal(result.length, 3);
assert.deepEqual(result.map(row => Array.from(row)), [[6,7,8],[7,8,9],[8,9,10]]);
assert.deepEqual(Array.from(kernel.output), [3,3]);
gpu.destroy();
}
test('dynamic output 2d grows auto', () => {
dynamicOutput2DGrows();
});
test('dynamic output 2d grows gpu', () => {
dynamicOutput2DGrows('gpu');
});
(GPU.isWebGLSupported ? test : skip)('dynamic output 2d grows webgl', () => {
dynamicOutput2DGrows('webgl');
});
(GPU.isWebGL2Supported ? test : skip)('dynamic output 2d grows webgl2', () => {
dynamicOutput2DGrows('webgl2');
});
(GPU.isHeadlessGLSupported ? test : skip)('dynamic output 2d grows headlessgl', () => {
dynamicOutput2DGrows('headlessgl');
});
test('dynamic output 2d grows cpu', () => {
dynamicOutput2DGrows('cpu');
});
function dynamicOutput2DShrinks(mode) {
const gpu = new GPU({ mode });
const kernel = gpu.createKernel(function() {
return this.output.x + this.output.y + this.thread.x + this.thread.y;
}, { dynamicOutput: true });
kernel.setOutput([3,3]);
let result = kernel();
assert.equal(result.length, 3);
assert.deepEqual(result.map(row => Array.from(row)), [[6,7,8],[7,8,9],[8,9,10]]);
assert.deepEqual(Array.from(kernel.output), [3,3]);
kernel.setOutput([2,2]);
result = kernel();
assert.equal(result.length, 2);
assert.deepEqual(result.map(row => Array.from(row)), [[4,5],[5,6]]);
assert.deepEqual(Array.from(kernel.output), [2,2]);
gpu.destroy();
}
test('dynamic output 2d shrinks auto', () => {
dynamicOutput2DShrinks();
});
test('dynamic output 2d shrinks gpu', () => {
dynamicOutput2DShrinks('gpu');
});
(GPU.isWebGLSupported ? test : skip)('dynamic output 2d shrinks webgl', () => {
dynamicOutput2DShrinks('webgl');
});
(GPU.isWebGL2Supported ? test : skip)('dynamic output 2d shrinks webgl2', () => {
dynamicOutput2DShrinks('webgl2');
});
(GPU.isHeadlessGLSupported ? test : skip)('dynamic output 2d shrinks headlessgl', () => {
dynamicOutput2DShrinks('headlessgl');
});
test('dynamic output 2d shrinks cpu', () => {
dynamicOutput2DShrinks('cpu');
});
function dynamicOutput2DKernelMapGrows(mode) {
const gpu = new GPU({ mode });
const kernel = gpu.createKernelMap({
result1: function map(v) {
return v;
}
}, function() {
return map(this.output.x + this.output.y + this.thread.x + this.thread.y);
}, { dynamicOutput: true });
kernel.setOutput([2,2]);
let result = kernel();
assert.equal(result.result.length, 2);
assert.equal(result.result1.length, 2);
assert.deepEqual(result.result.map(row => Array.from(row)), [[4,5],[5,6]]);
assert.deepEqual(result.result1.map(row => Array.from(row)), [[4,5],[5,6]]);
assert.deepEqual(Array.from(kernel.output), [2,2]);
kernel.setOutput([3,3]);
result = kernel();
assert.equal(result.result.length, 3);
assert.equal(result.result1.length, 3);
assert.deepEqual(result.result.map(row => Array.from(row)), [[6,7,8],[7,8,9],[8,9,10]]);
assert.deepEqual(result.result1.map(row => Array.from(row)), [[6,7,8],[7,8,9],[8,9,10]]);
assert.deepEqual(Array.from(kernel.output), [3,3]);
gpu.destroy();
}
test('dynamic output 2d kernel map grows auto', () => {
dynamicOutput2DKernelMapGrows();
});
test('dynamic output 2d kernel map grows gpu', () => {
dynamicOutput2DKernelMapGrows('gpu');
});
(GPU.isWebGLSupported ? test : skip)('dynamic output 2d kernel map grows webgl', () => {
dynamicOutput2DKernelMapGrows('webgl');
});
(GPU.isWebGL2Supported ? test : skip)('dynamic output 2d kernel map grows webgl2', () => {
dynamicOutput2DKernelMapGrows('webgl2');
});
(GPU.isHeadlessGLSupported ? test : skip)('dynamic output 2d kernel map grows headlessgl', () => {
dynamicOutput2DKernelMapGrows('headlessgl');
});
test('dynamic output 2d kernel map grows cpu', () => {
dynamicOutput2DKernelMapGrows('cpu');
});
function dynamicOutput2DKernelMapShrinks(mode) {
const gpu = new GPU({ mode });
const kernel = gpu.createKernelMap({
result1: function map(v) {
return v;
}
}, function() {
return map(this.output.x + this.output.y + this.thread.x + this.thread.y);
}, { dynamicOutput: true });
kernel.setOutput([3,3]);
let result = kernel();
assert.equal(result.result.length, 3);
assert.equal(result.result1.length, 3);
assert.deepEqual(result.result.map(row => Array.from(row)), [[6,7,8],[7,8,9],[8,9,10]]);
assert.deepEqual(result.result1.map(row => Array.from(row)), [[6,7,8],[7,8,9],[8,9,10]]);
assert.deepEqual(Array.from(kernel.output), [3,3]);
kernel.setOutput([2,2]);
result = kernel();
assert.equal(result.result.length, 2);
assert.equal(result.result1.length, 2);
assert.deepEqual(result.result.map(row => Array.from(row)), [[4,5],[5,6]]);
assert.deepEqual(result.result1.map(row => Array.from(row)), [[4,5],[5,6]]);
assert.deepEqual(Array.from(kernel.output), [2,2]);
gpu.destroy();
}
test('dynamic output 2d shrinks auto', () => {
dynamicOutput2DShrinks();
});
test('dynamic output 2d shrinks gpu', () => {
dynamicOutput2DShrinks('gpu');
});
(GPU.isWebGLSupported ? test : skip)('dynamic output 2d shrinks webgl', () => {
dynamicOutput2DShrinks('webgl');
});
(GPU.isWebGL2Supported ? test : skip)('dynamic output 2d shrinks webgl2', () => {
dynamicOutput2DShrinks('webgl2');
});
(GPU.isHeadlessGLSupported ? test : skip)('dynamic output 2d shrinks headlessgl', () => {
dynamicOutput2DShrinks('headlessgl');
});
test('dynamic output 2d shrinks cpu', () => {
dynamicOutput2DShrinks('cpu');
});
//TODO:
function dynamicOutput2DGraphicalGrows(mode) {
const gpu = new GPU({ mode });
const kernel = gpu.createKernel(function() {
this.color(1,1,1,1);
}, { graphical: true, dynamicOutput: true });
kernel.setOutput([2,2]);
kernel();
let result = kernel.getPixels();
assert.equal(result.length, 2 * 2 * 4);
assert.deepEqual(Array.from(result), [
255, 255, 255, 255,
255, 255, 255, 255,
255, 255, 255, 255,
255, 255, 255, 255
]);
assert.deepEqual(Array.from(kernel.output), [2,2]);
kernel.setOutput([3,3]);
kernel();
result = kernel.getPixels();
assert.equal(result.length, 3 * 3 * 4);
assert.deepEqual(Array.from(result), [
255, 255, 255, 255,
255, 255, 255, 255,
255, 255, 255, 255,
255, 255, 255, 255,
255, 255, 255, 255,
255, 255, 255, 255,
255, 255, 255, 255,
255, 255, 255, 255,
255, 255, 255, 255,
]);
assert.deepEqual(Array.from(kernel.output), [3,3]);
gpu.destroy();
}
test('dynamic output 2d graphical grows auto', () => {
dynamicOutput2DGraphicalGrows();
});
test('dynamic output 2d graphical grows gpu', () => {
dynamicOutput2DGraphicalGrows('gpu');
});
(GPU.isWebGLSupported ? test : skip)('dynamic output 2d graphical grows webgl', () => {
dynamicOutput2DGraphicalGrows('webgl');
});
(GPU.isWebGL2Supported ? test : skip)('dynamic output 2d graphical grows webgl2', () => {
dynamicOutput2DGraphicalGrows('webgl2');
});
(GPU.isHeadlessGLSupported ? test : skip)('dynamic output 2d graphical grows headlessgl', () => {
dynamicOutput2DGraphicalGrows('headlessgl');
});
(GPU.isCanvasSupported ? test : skip)('dynamic output 2d graphical grows cpu', () => {
dynamicOutput2DGraphicalGrows('cpu');
});
function dynamicOutput2DGraphicalShrinks(mode) {
const gpu = new GPU({ mode });
const kernel = gpu.createKernel(function() {
this.color(1,1,1,1);
}, { graphical: true, dynamicOutput: true });
kernel.setOutput([3,3]);
kernel();
let result = kernel.getPixels();
assert.equal(result.length, 3 * 3 * 4);
assert.deepEqual(Array.from(result), [
255, 255, 255, 255,
255, 255, 255, 255,
255, 255, 255, 255,
255, 255, 255, 255,
255, 255, 255, 255,
255, 255, 255, 255,
255, 255, 255, 255,
255, 255, 255, 255,
255, 255, 255, 255,
]);
assert.deepEqual(Array.from(kernel.output), [3,3]);
kernel.setOutput([2,2]);
kernel();
result = kernel.getPixels();
assert.equal(result.length, 2 * 2 * 4);
assert.deepEqual(Array.from(result), [
255, 255, 255, 255,
255, 255, 255, 255,
255, 255, 255, 255,
255, 255, 255, 255
]);
assert.deepEqual(Array.from(kernel.output), [2,2]);
gpu.destroy();
}
test('dynamic output 2d graphical shrinks auto', () => {
dynamicOutput2DGraphicalShrinks();
});
test('dynamic output 2d graphical shrinks gpu', () => {
dynamicOutput2DGraphicalShrinks('gpu');
});
(GPU.isWebGLSupported ? test : skip)('dynamic output 2d graphical shrinks webgl', () => {
dynamicOutput2DGraphicalShrinks('webgl');
});
(GPU.isWebGL2Supported ? test : skip)('dynamic output 2d graphical shrinks webgl2', () => {
dynamicOutput2DGraphicalShrinks('webgl2');
});
(GPU.isHeadlessGLSupported ? test : skip)('dynamic output 2d graphical shrinks headlessgl', () => {
dynamicOutput2DGraphicalShrinks('headlessgl');
});
(GPU.isCanvasSupported ? test : skip)('dynamic output 2d graphical shrinks cpu', () => {
dynamicOutput2DGraphicalShrinks('cpu');
});
function dynamicOutput3DGrows(mode) {
const gpu = new GPU({ mode });
const kernel = gpu.createKernel(function() {
return this.output.x + this.output.y + this.thread.z + this.thread.x + this.thread.y + this.thread.z;
}, { dynamicOutput: true });
kernel.setOutput([2,2,2]);
let result = kernel();
assert.equal(result.length, 2);
assert.deepEqual(result.map(matrix => matrix.map(row => Array.from(row))), [[[4,5],[5,6]],[[6,7],[7,8]]]);
assert.deepEqual(Array.from(kernel.output), [2,2,2]);
kernel.setOutput([3,3,3]);
result = kernel();
assert.equal(result.length, 3);
assert.deepEqual(result.map(matrix => matrix.map(row => Array.from(row))), [
[
[6,7,8],
[7,8,9],
[8,9,10]
],
[
[8,9,10],
[9,10,11],
[10,11,12]
],
[
[10,11,12],
[11,12,13],
[12,13,14]
]
]);
assert.deepEqual(Array.from(kernel.output), [3,3,3]);
gpu.destroy();
}
test('dynamic output 3d grows auto', () => {
dynamicOutput3DGrows();
});
test('dynamic output 3d grows gpu', () => {
dynamicOutput3DGrows('gpu');
});
(GPU.isWebGLSupported ? test : skip)('dynamic output 3d grows webgl', () => {
dynamicOutput3DGrows('webgl');
});
(GPU.isWebGL2Supported ? test : skip)('dynamic output 3d grows webgl2', () => {
dynamicOutput3DGrows('webgl2');
});
(GPU.isHeadlessGLSupported ? test : skip)('dynamic output 3d grows headlessgl', () => {
dynamicOutput3DGrows('headlessgl');
});
test('dynamic output 3d grows cpu', () => {
dynamicOutput3DGrows('cpu');
});
function dynamicOutput3DShrinks(mode) {
const gpu = new GPU({ mode });
const kernel = gpu.createKernel(function() {
return this.output.x + this.output.y + this.thread.z + this.thread.x + this.thread.y + this.thread.z;
}, { dynamicOutput: true });
kernel.setOutput([3,3,3]);
let result = kernel();
assert.equal(result.length, 3);
assert.deepEqual(result.map(matrix => matrix.map(row => Array.from(row))), [
[
[6,7,8],
[7,8,9],
[8,9,10]
],
[
[8,9,10],
[9,10,11],
[10,11,12]
],
[
[10,11,12],
[11,12,13],
[12,13,14]
]
]);
assert.deepEqual(Array.from(kernel.output), [3,3,3]);
kernel.setOutput([2,2,2]);
result = kernel();
assert.equal(result.length, 2);
assert.deepEqual(result.map(matrix => matrix.map(row => Array.from(row))), [[[4,5],[5,6]],[[6,7],[7,8]]]);
assert.deepEqual(Array.from(kernel.output), [2,2,2]);
gpu.destroy();
}
test('dynamic output 3d shrinks auto', () => {
dynamicOutput3DShrinks();
});
test('dynamic output 3d shrinks gpu', () => {
dynamicOutput3DShrinks('gpu');
});
(GPU.isWebGLSupported ? test : skip)('dynamic output 3d shrinks webgl', () => {
dynamicOutput3DShrinks('webgl');
});
(GPU.isWebGL2Supported ? test : skip)('dynamic output 3d shrinks webgl2', () => {
dynamicOutput3DShrinks('webgl2');
});
(GPU.isHeadlessGLSupported ? test : skip)('dynamic output 3d shrinks headlessgl', () => {
dynamicOutput3DShrinks('headlessgl');
});
test('dynamic output 3d shrinks cpu', () => {
dynamicOutput3DShrinks('cpu');
});
function dynamicOutput3DKernelMapGrows(mode) {
const gpu = new GPU({ mode });
const kernel = gpu.createKernelMap({
result1: function map(v) {
return v;
}
}, function() {
return map(this.output.x + this.output.y + this.thread.z + this.thread.x + this.thread.y + this.thread.z);
}, { dynamicOutput: true });
kernel.setOutput([2,2,2]);
let result = kernel();
assert.equal(result.result.length, 2);
assert.equal(result.result1.length, 2);
assert.deepEqual(result.result.map(matrix => matrix.map(row => Array.from(row))), [[[4,5],[5,6]],[[6,7],[7,8]]]);
assert.deepEqual(result.result1.map(matrix => matrix.map(row => Array.from(row))), [[[4,5],[5,6]],[[6,7],[7,8]]]);
assert.deepEqual(Array.from(kernel.output), [2,2,2]);
kernel.setOutput([3,3,3]);
result = kernel();
assert.equal(result.result.length, 3);
assert.equal(result.result1.length, 3);
assert.deepEqual(result.result.map(matrix => matrix.map(row => Array.from(row))), [
[
[6,7,8],
[7,8,9],
[8,9,10]
],
[
[8,9,10],
[9,10,11],
[10,11,12]
],
[
[10,11,12],
[11,12,13],
[12,13,14]
]
]);
assert.deepEqual(result.result1.map(matrix => matrix.map(row => Array.from(row))), [
[
[6,7,8],
[7,8,9],
[8,9,10]
],
[
[8,9,10],
[9,10,11],
[10,11,12]
],
[
[10,11,12],
[11,12,13],
[12,13,14]
]
]);
assert.deepEqual(Array.from(kernel.output), [3,3,3]);
gpu.destroy();
}
test('dynamic output 3d kernel map grows auto', () => {
dynamicOutput3DKernelMapGrows();
});
test('dynamic output 3d kernel map grows gpu', () => {
dynamicOutput3DKernelMapGrows('gpu');
});
(GPU.isWebGLSupported ? test : skip)('dynamic output 3d kernel map grows webgl', () => {
dynamicOutput3DKernelMapGrows('webgl');
});
(GPU.isWebGL2Supported ? test : skip)('dynamic output 3d kernel map grows webgl2', () => {
dynamicOutput3DKernelMapGrows('webgl2');
});
(GPU.isHeadlessGLSupported ? test : skip)('dynamic output 3d kernel map grows headlessgl', () => {
dynamicOutput3DKernelMapGrows('headlessgl');
});
test('dynamic output 3d kernel map grows cpu', () => {
dynamicOutput3DKernelMapGrows('cpu');
});
function dynamicOutput3DKernelMapShrinks(mode) {
const gpu = new GPU({ mode });
const kernel = gpu.createKernelMap({
result1: function map(v) {
return v;
}
}, function() {
return map(this.output.x + this.output.y + this.thread.z + this.thread.x + this.thread.y + this.thread.z);
}, { dynamicOutput: true });
kernel.setOutput([3,3,3]);
let result = kernel();
assert.equal(result.result.length, 3);
assert.equal(result.result1.length, 3);
assert.deepEqual(result.result.map(matrix => matrix.map(row => Array.from(row))), [
[
[6,7,8],
[7,8,9],
[8,9,10]
],
[
[8,9,10],
[9,10,11],
[10,11,12]
],
[
[10,11,12],
[11,12,13],
[12,13,14]
]
]);
assert.deepEqual(result.result1.map(matrix => matrix.map(row => Array.from(row))), [
[
[6,7,8],
[7,8,9],
[8,9,10]
],
[
[8,9,10],
[9,10,11],
[10,11,12]
],
[
[10,11,12],
[11,12,13],
[12,13,14]
]
]);
assert.deepEqual(Array.from(kernel.output), [3,3,3]);
kernel.setOutput([2,2,2]);
result = kernel();
assert.equal(result.result.length, 2);
assert.equal(result.result1.length, 2);
assert.deepEqual(result.result.map(matrix => matrix.map(row => Array.from(row))), [[[4,5],[5,6]],[[6,7],[7,8]]]);
assert.deepEqual(result.result1.map(matrix => matrix.map(row => Array.from(row))), [[[4,5],[5,6]],[[6,7],[7,8]]]);
assert.deepEqual(Array.from(kernel.output), [2,2,2]);
gpu.destroy();
}
test('dynamic output 3d kernel map shrinks auto', () => {
dynamicOutput3DKernelMapShrinks();
});
test('dynamic output 3d kernel map shrinks gpu', () => {
dynamicOutput3DKernelMapShrinks('gpu');
});
(GPU.isWebGLSupported ? test : skip)('dynamic output 3d kernel map shrinks webgl', () => {
dynamicOutput3DKernelMapShrinks('webgl');
});
(GPU.isWebGL2Supported ? test : skip)('dynamic output 3d kernel map shrinks webgl2', () => {
dynamicOutput3DKernelMapShrinks('webgl2');
});
(GPU.isHeadlessGLSupported ? test : skip)('dynamic output 3d kernel map shrinks headlessgl', () => {
dynamicOutput3DKernelMapShrinks('headlessgl');
});
test('dynamic output 3d kernel map shrinks cpu', () => {
dynamicOutput3DKernelMapShrinks('cpu');
});