mirror of
https://github.com/gpujs/gpu.js.git
synced 2025-12-08 20:35:56 +00:00
Along with tests and documentation on which versions are affected. Sorry for the inconvenience! feat: Add more advanced-typescript.ts fix: Alter documentation mentioning v2 fix: Example of fluid.html, to use `immutable`
82 lines
2.9 KiB
JavaScript
82 lines
2.9 KiB
JavaScript
const { assert, test, module: describe, skip } = require('qunit');
|
|
const sinon = require('sinon');
|
|
const { GPU } = require('../../src');
|
|
|
|
describe('internal: kernelRunShortcut');
|
|
|
|
function testImmutableSavesSwitchedKernel(mode) {
|
|
const gpu = new GPU({ mode });
|
|
const kernel = gpu.createKernel(function(value) {
|
|
return value[0] + 1;
|
|
}, {
|
|
output: [1],
|
|
pipeline: true,
|
|
immutable: true,
|
|
});
|
|
const one = kernel(new Float32Array([0]));
|
|
const arrayKernel = kernel.kernel;
|
|
const arrayKernelSpy = sinon.spy(arrayKernel, 'onRequestSwitchKernel');
|
|
|
|
// recompile kernel
|
|
const two = kernel(one);
|
|
assert.equal(arrayKernelSpy.callCount, 1);
|
|
const textureKernel = kernel.kernel;
|
|
const textureKernelSpy = sinon.spy(textureKernel, 'onRequestSwitchKernel');
|
|
assert.ok(kernel.kernel !== arrayKernel);
|
|
assert.ok(kernel.kernel === textureKernel);
|
|
|
|
// reuse existing kernel a few times, ensure no overwriting
|
|
const three = kernel(two);
|
|
assert.equal(arrayKernelSpy.callCount, 1);
|
|
assert.equal(textureKernelSpy.callCount, 0);
|
|
assert.ok(kernel.kernel === textureKernel);
|
|
const four = kernel(three);
|
|
assert.equal(arrayKernelSpy.callCount, 1);
|
|
assert.equal(textureKernelSpy.callCount, 0);
|
|
assert.ok(kernel.kernel === textureKernel);
|
|
const five = kernel(four);
|
|
assert.equal(arrayKernelSpy.callCount, 1);
|
|
assert.equal(textureKernelSpy.callCount, 0);
|
|
assert.ok(kernel.kernel === textureKernel);
|
|
const six = kernel(five);
|
|
assert.equal(arrayKernelSpy.callCount, 1);
|
|
assert.equal(textureKernelSpy.callCount, 0);
|
|
assert.ok(kernel.kernel === textureKernel);
|
|
|
|
// switch back to original kernel, don't recompile
|
|
assert.deepEqual(six.toArray(), new Float32Array([6]));
|
|
const seven = kernel(six.toArray());
|
|
assert.ok(kernel.kernel === arrayKernel);
|
|
assert.equal(arrayKernelSpy.callCount, 1);
|
|
assert.equal(textureKernelSpy.callCount, 1);
|
|
|
|
// ensure output has been correct all along
|
|
assert.deepEqual(one.toArray(), new Float32Array([1]));
|
|
assert.deepEqual(two.toArray(), new Float32Array([2]));
|
|
assert.deepEqual(three.toArray(), new Float32Array([3]));
|
|
assert.deepEqual(four.toArray(), new Float32Array([4]));
|
|
assert.deepEqual(five.toArray(), new Float32Array([5]));
|
|
assert.deepEqual(six.toArray(), new Float32Array([6]));
|
|
assert.deepEqual(seven.toArray(), new Float32Array([7]));
|
|
gpu.destroy();
|
|
}
|
|
|
|
test('immutable saves switched kernel auto', () => {
|
|
testImmutableSavesSwitchedKernel();
|
|
});
|
|
|
|
test('immutable saves switched kernel gpu', () => {
|
|
testImmutableSavesSwitchedKernel('gpu');
|
|
});
|
|
|
|
(GPU.isWebGLSupported ? test : skip)('immutable saves switched kernel webgl', () => {
|
|
testImmutableSavesSwitchedKernel('webgl');
|
|
});
|
|
|
|
(GPU.isWebGL2Supported ? test : skip)('immutable saves switched kernel webgl2', () => {
|
|
testImmutableSavesSwitchedKernel('webgl2');
|
|
});
|
|
|
|
(GPU.isHeadlessGLSupported ? test : skip)('immutable saves switched kernel headlessgl', () => {
|
|
testImmutableSavesSwitchedKernel('headlessgl');
|
|
}); |