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(); }
function copy3DTexture(precision, mode) { const gpu = new GPU({ mode }); function makeTexture() { return (gpu.createKernel(function() { return this.thread.x + (this.thread.y * this.output.x) * (this.output.x * this.output.y * this.thread.z); }, { output: [5, 5, 5], pipeline: true, precision }))(); } const texture = makeTexture(); const clone = texture.clone(); assert.notEqual(texture, clone); assert.equal(texture.texture, clone.texture); assert.deepEqual(texture.toArray(), clone.toArray()); gpu.destroy(); }
function copy1DTexture(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(); const clone = texture.clone(); assert.notEqual(texture, clone); assert.equal(texture.texture, clone.texture); assert.deepEqual(texture.toArray(), clone.toArray()); gpu.destroy(); }
const result = kernel(); assert.equal(result.texture._refs, 2); const clone1 = result.clone(); assert.equal(result.texture._refs, 3); const clone2 = result.clone(); assert.equal(result.texture._refs, 4); const clone3 = result.clone(); assert.equal(result.texture._refs, 5); const clone4 = result.clone(); assert.equal(result.texture._refs, 6); const clone5 = result.clone(); assert.equal(result.texture._refs, 7);
function copy2DTexture(precision, mode) { const gpu = new GPU({ mode }); function makeTexture() { return (gpu.createKernel(function() { return this.thread.x + (this.thread.y * this.output.x); }, { output: [5, 5], pipeline: true, precision }))(); } const texture = makeTexture(); const clone = texture.clone(); assert.notEqual(texture, clone); assert.equal(texture.texture, clone.texture); assert.deepEqual(texture.toArray(), clone.toArray()); gpu.destroy(); }
function testArray1D4ThenArray(mode) { const gpu = new GPU({ mode }); function createTextureOf(value, type) { return (gpu.createKernel(function(value) { return value[this.thread.x]; }, { output: [1], pipeline: true, argumentTypes: { value: type } }))(value); } const array4Texture = createTextureOf([[1,2,3,4]], 'Array1D(4)'); const array4TextureClone = array4Texture.clone(); const arrayTexture = createTextureOf([1], 'Array'); const arrayTextureClone = arrayTexture.clone(); assert.notEqual(array4TextureClone, arrayTextureClone); assert.deepEqual(array4TextureClone.toArray(), [new Float32Array([1,2,3,4])]); assert.deepEqual(arrayTextureClone.toArray(), new Float32Array([1])); gpu.destroy(); }
function testArrayThenArray1D4(mode) { const gpu = new GPU({ mode }); function createTextureOf(value, type) { return (gpu.createKernel(function(value) { return value[this.thread.x]; }, { output: [1], pipeline: true, argumentTypes: { value: type } }))(value); } const arrayTexture = createTextureOf([1], 'Array'); const arrayTextureClone = arrayTexture.clone(); const array4Texture = createTextureOf([[1,2,3,4]], 'Array1D(4)'); const array4TextureClone = array4Texture.clone(); assert.notEqual(arrayTextureClone, array4TextureClone); assert.deepEqual(arrayTextureClone.toArray(), new Float32Array([1])); assert.deepEqual(array4TextureClone.toArray(), [new Float32Array([1,2,3,4])]); gpu.destroy(); }