gpu.js/test/internal/underscores.js

218 lines
5.8 KiB
JavaScript

const { assert, skip, test, module: describe, only } = require('qunit');
const { GPU } = require('../../src');
describe('internal: underscores');
function testNumberArgument(mode) {
const gpu = new GPU({ mode });
const kernel = gpu.createKernel(function(value_1) {
return value_1;
}, { output: [1], });
assert.equal(kernel(1)[0], 1);
gpu.destroy();
}
test('number argument auto', () => {
testNumberArgument();
});
test('number argument gpu', () => {
testNumberArgument('gpu');
});
(GPU.isWebGLSupported ? test : skip)('number argument webgl', () => {
testNumberArgument('webgl');
});
(GPU.isWebGL2Supported ? test : skip)('number argument webgl2', () => {
testNumberArgument('webgl2');
});
(GPU.isHeadlessGLSupported ? test : skip)('number argument headlessgl', () => {
testNumberArgument('headlessgl');
});
test('number argument cpu', () => {
testNumberArgument('cpu');
});
function testArrayArgument(mode) {
const gpu = new GPU({ mode });
const kernel = gpu.createKernel(function(value_1) {
return value_1[this.thread.x];
}, { output: [1], });
assert.equal(kernel([1])[0], 1);
gpu.destroy();
}
test('array argument auto', () => {
testArrayArgument();
});
test('array argument gpu', () => {
testArrayArgument('gpu');
});
(GPU.isWebGLSupported ? test : skip)('array argument webgl', () => {
testArrayArgument('webgl');
});
(GPU.isWebGL2Supported ? test : skip)('array argument webgl2', () => {
testArrayArgument('webgl2');
});
(GPU.isHeadlessGLSupported ? test : skip)('array argument headlessgl', () => {
testArrayArgument('headlessgl');
});
test('array argument cpu', () => {
testArrayArgument('cpu');
});
function testTextureArgument(mode) {
const gpu = new GPU({ mode });
const texture = gpu.createKernel(function() { return 1; }, { output: [1], pipeline: true })();
const kernel = gpu.createKernel(function(value_1) {
return value_1[this.thread.x];
}, { output: [1], });
assert.equal(kernel(texture)[0], 1);
gpu.destroy();
}
test('texture argument auto', () => {
testTextureArgument();
});
test('texture argument gpu', () => {
testTextureArgument('gpu');
});
(GPU.isWebGLSupported ? test : skip)('texture argument webgl', () => {
testTextureArgument('webgl');
});
(GPU.isWebGL2Supported ? test : skip)('texture argument webgl2', () => {
testTextureArgument('webgl2');
});
(GPU.isHeadlessGLSupported ? test : skip)('texture argument headlessgl', () => {
testTextureArgument('headlessgl');
});
test('texture argument cpu', () => {
testTextureArgument('cpu');
});
function testArray2TextureArgument(mode) {
const gpu = new GPU({ mode });
const texture = gpu.createKernel(function() { return [1, 1]; }, { output: [1], pipeline: true })();
const kernel = gpu.createKernel(function(value_1) {
debugger;
return value_1[this.thread.x];
}, { output: [1], });
assert.deepEqual(kernel(texture)[0], new Float32Array([1, 1]));
gpu.destroy();
}
test('array2 texture argument auto', () => {
testArray2TextureArgument();
});
test('array2 texture argument gpu', () => {
testArray2TextureArgument('gpu');
});
(GPU.isWebGLSupported ? test : skip)('array2 texture argument webgl', () => {
testArray2TextureArgument('webgl');
});
(GPU.isWebGL2Supported ? test : skip)('array2 texture argument webgl2', () => {
testArray2TextureArgument('webgl2');
});
(GPU.isHeadlessGLSupported ? test : skip)('array2 texture argument headlessgl', () => {
testArray2TextureArgument('headlessgl');
});
function testNumberConstant(mode) {
const gpu = new GPU({ mode });
const kernel = gpu.createKernel(function() {
return this.constants.value_1;
}, {
output: [1],
constants: {
value_1: 1
},
});
assert.equal(kernel()[0], 1);
gpu.destroy();
}
test('number constant auto', () => {
testNumberConstant();
});
test('number constant gpu', () => {
testNumberConstant('gpu');
});
(GPU.isWebGLSupported ? test : skip)('number constant webgl', () => {
testNumberConstant('webgl');
});
(GPU.isWebGL2Supported ? test : skip)('number constant webgl2', () => {
testNumberConstant('webgl2');
});
(GPU.isHeadlessGLSupported ? test : skip)('number constant headlessgl', () => {
testNumberConstant('headlessgl');
});
test('number constant cpu', () => {
testNumberConstant('cpu');
});
function testArrayConstant(mode) {
const gpu = new GPU({ mode });
const kernel = gpu.createKernel(function() {
return this.constants.value_1[0];
}, {
output: [1],
constants: {
value_1: [1]
},
});
assert.equal(kernel()[0], 1);
gpu.destroy();
}
test('array constant auto', () => {
testArrayConstant();
});
test('array constant gpu', () => {
testArrayConstant('gpu');
});
(GPU.isWebGLSupported ? test : skip)('array constant webgl', () => {
testArrayConstant('webgl');
});
(GPU.isWebGL2Supported ? test : skip)('array constant webgl2', () => {
testArrayConstant('webgl2');
});
(GPU.isHeadlessGLSupported ? test : skip)('array constant headlessgl', () => {
testArrayConstant('headlessgl');
});
test('array constant cpu', () => {
testArrayConstant('cpu');
});
function testTextureConstant(mode) {
const gpu = new GPU({ mode });
const texture = gpu.createKernel(function() { return 1; }, { output: [1], pipeline: true })();
const kernel = gpu.createKernel(function() {
return this.constants.value_1[0];
}, {
output: [1],
constants: {
value_1: texture
},
});
assert.equal(kernel()[0], 1);
gpu.destroy();
}
test('texture constant auto', () => {
testTextureConstant();
});
test('texture constant gpu', () => {
testTextureConstant('gpu');
});
(GPU.isWebGLSupported ? test : skip)('texture constant webgl', () => {
testTextureConstant('webgl');
});
(GPU.isWebGL2Supported ? test : skip)('texture constant webgl2', () => {
testTextureConstant('webgl2');
});
(GPU.isHeadlessGLSupported ? test : skip)('texture constant headlessgl', () => {
testTextureConstant('headlessgl');
});