mirror of
https://github.com/gpujs/gpu.js.git
synced 2026-01-18 16:04:10 +00:00
94 lines
2.7 KiB
JavaScript
94 lines
2.7 KiB
JavaScript
const { assert, skip, test, module: describe, only } = require('qunit');
|
|
const { GPU } = require('../../src');
|
|
|
|
describe('features: clear textures');
|
|
|
|
function clearTexture(precision, mode) {
|
|
const gpu = new GPU({ mode });
|
|
function makeTexture() {
|
|
return (gpu.createKernel(function() {
|
|
return this.thread.x;
|
|
}, {
|
|
output: [5],
|
|
pipeline: true,
|
|
precision
|
|
}))();
|
|
}
|
|
const texture = makeTexture();
|
|
assert.deepEqual(texture.toArray(), new Float32Array([0,1,2,3,4]));
|
|
texture.clear();
|
|
const texture2 = makeTexture(); // put another texture in the way
|
|
assert.deepEqual(texture.toArray(), new Float32Array([0,0,0,0,0]));
|
|
assert.deepEqual(texture2.toArray(), new Float32Array([0,1,2,3,4]));
|
|
gpu.destroy();
|
|
}
|
|
|
|
test('unsigned precision auto', () => {
|
|
clearTexture('unsigned');
|
|
});
|
|
|
|
(GPU.isWebGLSupported ? test : skip)('unsigned precision webgl', () => {
|
|
clearTexture('unsigned', 'webgl');
|
|
});
|
|
|
|
(GPU.isWebGL2Supported ? test : skip)('unsigned precision webgl2', () => {
|
|
clearTexture('unsigned', 'webgl2');
|
|
});
|
|
|
|
(GPU.isHeadlessGLSupported ? test : skip)('unsigned precision headlessgl', () => {
|
|
clearTexture('unsigned', 'headlessgl');
|
|
});
|
|
|
|
(GPU.isSinglePrecisionSupported ? test : skip)('single precision auto', () => {
|
|
clearTexture('single');
|
|
});
|
|
|
|
(GPU.isSinglePrecisionSupported && GPU.isWebGLSupported ? test : skip)('single precision webgl', () => {
|
|
clearTexture('single', 'webgl');
|
|
});
|
|
|
|
(GPU.isSinglePrecisionSupported && GPU.isWebGL2Supported ? test : skip)('single precision webgl2', () => {
|
|
clearTexture('single', 'webgl2');
|
|
});
|
|
|
|
(GPU.isSinglePrecisionSupported && GPU.isHeadlessGLSupported ? test : skip)('single precision headlessgl', () => {
|
|
clearTexture('single', 'headlessgl');
|
|
});
|
|
|
|
|
|
function clearClonedTexture(mode) {
|
|
const gpu = new GPU({ mode });
|
|
const kernel = gpu.createKernel(function() {
|
|
return 1;
|
|
}, { output: [1], pipeline: true, immutable: true });
|
|
const result = kernel();
|
|
assert.equal(result.toArray()[0], 1);
|
|
const result2 = result.clone();
|
|
const result3 = result2.clone();
|
|
assert.equal(result2.toArray()[0], 1);
|
|
assert.equal(result3.toArray()[0], 1);
|
|
result2.clear();
|
|
assert.equal(result2.toArray()[0], 0);
|
|
assert.equal(result3.toArray()[0], 1);
|
|
gpu.destroy();
|
|
}
|
|
|
|
test('clear cloned texture auto', () => {
|
|
clearClonedTexture();
|
|
});
|
|
|
|
test('clear cloned texture gpu', () => {
|
|
clearClonedTexture('gpu');
|
|
});
|
|
|
|
(GPU.isWebGLSupported ? test : skip)('clear cloned texture webgl', () => {
|
|
clearClonedTexture('webgl');
|
|
});
|
|
|
|
(GPU.isWebGL2Supported ? test : skip)('clear cloned texture webgl2', () => {
|
|
clearClonedTexture('webgl2');
|
|
});
|
|
|
|
(GPU.isHeadlessGLSupported ? test : skip)('clear cloned texture headlessgl', () => {
|
|
clearClonedTexture('headlessgl');
|
|
}); |