mirror of
https://github.com/gpujs/gpu.js.git
synced 2025-12-08 20:35:56 +00:00
fix: Modulo negatives fix: Modulo accuracy issue on OSX with `integerCorrectionModulo` fix: Follow naming convention `div_with_int_check` to `divWithIntCheck` fix: Member expression with function fix: CPU variable assignment fix: `gpu.addFunction` needed to be before createKernel and documentation fix: mandelbulb.html from above .addFunction
200 lines
5.0 KiB
JavaScript
200 lines
5.0 KiB
JavaScript
const { assert, skip, test, module: describe, only } = require('qunit');
|
|
const { GPU } = require('../../src');
|
|
|
|
describe('features: function return');
|
|
|
|
function functionReturnFloat( mode ) {
|
|
const gpu = new GPU({ mode });
|
|
const f = gpu.createKernel(function() {
|
|
return 42;
|
|
}, {
|
|
output : [1]
|
|
});
|
|
assert.equal(f()[0], 42);
|
|
gpu.destroy();
|
|
}
|
|
|
|
test('float auto', () => {
|
|
functionReturnFloat(null);
|
|
});
|
|
|
|
test('float gpu', () => {
|
|
functionReturnFloat('gpu');
|
|
});
|
|
|
|
(GPU.isWebGLSupported ? test : skip)('float webgl', () => {
|
|
functionReturnFloat('webgl');
|
|
});
|
|
|
|
(GPU.isWebGL2Supported ? test : skip)('float webgl2', () => {
|
|
functionReturnFloat('webgl2');
|
|
});
|
|
|
|
(GPU.isHeadlessGLSupported ? test : skip)('float headlessgl', () => {
|
|
functionReturnFloat('headlessgl');
|
|
});
|
|
|
|
test('float cpu', () => {
|
|
functionReturnFloat('cpu');
|
|
});
|
|
|
|
|
|
function functionReturnArray2( mode ) {
|
|
const gpu = new GPU({ mode });
|
|
const f = gpu.createKernel(function() {
|
|
return [42, 43];
|
|
}, {
|
|
output : [1]
|
|
});
|
|
const result = f();
|
|
assert.equal(result[0].constructor, Float32Array);
|
|
assert.equal(result[0][0], 42);
|
|
assert.equal(result[0][1], 43);
|
|
gpu.destroy();
|
|
}
|
|
|
|
(GPU.isSinglePrecisionSupported ? test : skip)('Array(2) auto', () => {
|
|
functionReturnArray2(null);
|
|
});
|
|
|
|
(GPU.isSinglePrecisionSupported ? test : skip)('Array(2) gpu', () => {
|
|
functionReturnArray2('gpu');
|
|
});
|
|
|
|
(GPU.isWebGLSupported && GPU.isSinglePrecisionSupported ? test : skip)('Array(2) webgl', () => {
|
|
functionReturnArray2('webgl');
|
|
});
|
|
|
|
(GPU.isWebGL2Supported && GPU.isSinglePrecisionSupported ? test : skip)('Array(2) webgl2', () => {
|
|
functionReturnArray2('webgl2');
|
|
});
|
|
|
|
(GPU.isHeadlessGLSupported && GPU.isSinglePrecisionSupported ? test : skip)('Array(2) headlessgl', () => {
|
|
functionReturnArray2('headlessgl');
|
|
});
|
|
|
|
test('Array(2) cpu', () => {
|
|
functionReturnArray2('cpu');
|
|
});
|
|
|
|
function functionReturnArray3( mode ) {
|
|
const gpu = new GPU({ mode });
|
|
const f = gpu.createKernel(function() {
|
|
return [42, 43, 44];
|
|
}, {
|
|
output : [1]
|
|
});
|
|
const result = f();
|
|
assert.equal(result[0].constructor, Float32Array);
|
|
assert.equal(result[0][0], 42);
|
|
assert.equal(result[0][1], 43);
|
|
assert.equal(result[0][2], 44);
|
|
gpu.destroy();
|
|
}
|
|
|
|
(GPU.isSinglePrecisionSupported ? test : skip)('Array(3) auto', () => {
|
|
functionReturnArray3(null);
|
|
});
|
|
|
|
(GPU.isSinglePrecisionSupported ? test : skip)('Array(3) gpu', () => {
|
|
functionReturnArray3('gpu');
|
|
});
|
|
|
|
(GPU.isWebGLSupported && GPU.isSinglePrecisionSupported ? test : skip)('Array(3) webgl', () => {
|
|
functionReturnArray3('webgl');
|
|
});
|
|
|
|
(GPU.isWebGL2Supported && GPU.isSinglePrecisionSupported ? test : skip)('Array(3) webgl2', () => {
|
|
functionReturnArray3('webgl2');
|
|
});
|
|
|
|
(GPU.isHeadlessGLSupported && GPU.isSinglePrecisionSupported ? test : skip)('Array(3) headlessgl', () => {
|
|
functionReturnArray3('headlessgl');
|
|
});
|
|
|
|
test('Array(3) cpu', () => {
|
|
functionReturnArray3('cpu');
|
|
});
|
|
|
|
|
|
function functionReturnArray4( mode ) {
|
|
const gpu = new GPU({ mode });
|
|
const f = gpu.createKernel(function() {
|
|
return [42, 43, 44, 45];
|
|
}, {
|
|
output : [1]
|
|
});
|
|
|
|
const result = f();
|
|
assert.equal(result[0].constructor, Float32Array);
|
|
assert.equal(result[0][0], 42);
|
|
assert.equal(result[0][1], 43);
|
|
assert.equal(result[0][2], 44);
|
|
assert.equal(result[0][3], 45);
|
|
gpu.destroy();
|
|
}
|
|
|
|
(GPU.isSinglePrecisionSupported ? test : skip)('Array(4) auto', () => {
|
|
functionReturnArray4(null);
|
|
});
|
|
|
|
(GPU.isSinglePrecisionSupported ? test : skip)('Array(4) gpu', () => {
|
|
functionReturnArray4('gpu');
|
|
});
|
|
|
|
(GPU.isWebGLSupported && GPU.isSinglePrecisionSupported ? test : skip)('Array(4) webgl', () => {
|
|
functionReturnArray4('webgl');
|
|
});
|
|
|
|
(GPU.isWebGL2Supported && GPU.isSinglePrecisionSupported ? test : skip)('Array(4) webgl2', () => {
|
|
functionReturnArray4('webgl2');
|
|
});
|
|
|
|
(GPU.isHeadlessGLSupported && GPU.isSinglePrecisionSupported ? test : skip)('Array(4) headlessgl', () => {
|
|
functionReturnArray4('headlessgl');
|
|
});
|
|
|
|
test('Array(4) cpu', () => {
|
|
functionReturnArray4('cpu');
|
|
});
|
|
|
|
function functionReturnArray4MemberExpression(mode) {
|
|
const gpu = new GPU({ mode });
|
|
const kernel = gpu.createKernel(function(value) {
|
|
let pixel = toIntArray4(value[this.thread.y][this.thread.x]);
|
|
return pixel;
|
|
function toIntArray4(pixel) {
|
|
return [pixel[0] * 255, pixel[1] * 255, pixel[2] * 255, pixel[3] * 255];
|
|
}
|
|
}, {
|
|
output: [1, 1],
|
|
argumentTypes: { value: 'Array2D(4)' },
|
|
});
|
|
const result = kernel([[[1,1,1,1]]]);
|
|
assert.deepEqual(Array.from(result[0][0]), [255,255,255,255]);
|
|
gpu.destroy();
|
|
}
|
|
|
|
test('auto', () => {
|
|
functionReturnArray4MemberExpression();
|
|
});
|
|
|
|
test('gpu', () => {
|
|
functionReturnArray4MemberExpression('gpu');
|
|
});
|
|
|
|
(GPU.isWebGLSupported ? test : skip)('webgl', () => {
|
|
functionReturnArray4MemberExpression('webgl');
|
|
});
|
|
|
|
(GPU.isWebGL2Supported ? test : skip)('webgl2', () => {
|
|
functionReturnArray4MemberExpression('webgl2');
|
|
});
|
|
|
|
(GPU.isHeadlessGLSupported ? test : skip)('headlessgl', () => {
|
|
functionReturnArray4MemberExpression('headlessgl');
|
|
});
|
|
|
|
test('cpu', () => {
|
|
functionReturnArray4MemberExpression('cpu');
|
|
}); |