Strange output on Array3D(3) toArray()
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 35/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Ferma
- Stack tecnologico
- javascript, node.js
- Ambito
- computer-graphics
Direzione di ricerca
Inizia con il percorso degli argomenti createKernel(...), Array3D(3) e bufferTex.toArray() usando la riproduzione 8×8×8 fornita su Node.js/headlessgl. Confronta il buffer della CPU con l'array della texture restituito e traccia la lettura della texture dalla GPU e la mappatura degli indici; il lavoro è completo quando toArray() conserva i valori di input o applica una mappatura coerente.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
What is wrong?
When using a kernel to draw a CPU Array3D(3) into a texture and then converted back using toArray(), the resulting array is very strange and wrong, with some values being correct and others being either duplicated or entirely incorrect.
Where does it happen?
In GPU.js, running on my Windows 7 PC, headlessgl in node.js v12.18.1.
How do we replicate the issue?
Create a 3D array and assign each value set to its index in the array...
e.g.,
const gridSize = 8;
const buffer = [];
for (let x = 0; x < gridSize; x++) {
let currXArr = [];
buffer.push(currXArr);
for (let y = 0; y < gridSize; y++) {
let currYArr = [];
currXArr.push(currYArr);
for (let z = 0; z < gridSize; z++) {
currYArr.push(new Float32Array([x,y,z]));
}
}
}
Build the following kernel:
const pipelineFuncSettings = {
output: [gridSize, gridSize, gridSize],
pipeline: true,
returnType: 'Array(3)',
};
const copyFramebufferFuncImmutable = gpu.createKernel(function(framebufTex) {
const voxelColour = framebufTex[this.thread.x][this.thread.y][this.thread.z];
return [voxelColour[0], voxelColour[1], voxelColour[2]];
}, {...pipelineFuncSettings, immutable: true, argumentTypes: {framebufTex: 'Array3D(3)'}});
Draw the CPU buffer into a GPU texture and retrieve it as an array:
const bufferTex = copyFramebufferFuncImmutable(buffer);
const texArray = bufferTex.toArray();
Then look to see if what we did was properly copied from the CPU -> GPU -> CPU:
function debugPrint(arr) {
for (let x = 0; x < gridSize; x++) {
for (let y = 0; y < gridSize; y++) {
const temp = [];
for (let z = 0; z < gridSize; z++) {
const currColour = arr[x][y][z];
temp.push("("+currColour[0].toFixed(0)+","+currColour[1].toFixed(0)+","+currColour[2].toFixed(0)+")")
}
strArr.push(temp.join(", "));
}
}
console.log(strArr.join("\n"));
}
... and get this comparative abomination:
CPU (Original/Control) i.e., debugPrint(buffer);:
(0,0,0), (0,0,1), (0,0,2), (0,0,3), (0,0,4), (0,0,5), (0,0,6), (0,0,7)
(0,1,0), (0,1,1), (0,1,2), (0,1,3), (0,1,4), (0,1,5), (0,1,6), (0,1,7)
(0,2,0), (0,2,1), (0,2,2), (0,2,3), (0,2,4), (0,2,5), (0,2,6), (0,2,7)
(0,3,0), (0,3,1), (0,3,2), (0,3,3), (0,3,4), (0,3,5), (0,3,6), (0,3,7)
(0,4,0), (0,4,1), (0,4,2), (0,4,3), (0,4,4), (0,4,5), (0,4,6), (0,4,7)
(0,5,0), (0,5,1), (0,5,2), (0,5,3), (0,5,4), (0,5,5), (0,5,6), (0,5,7)
(0,6,0), (0,6,1), (0,6,2), (0,6,3), (0,6,4), (0,6,5), (0,6,6), (0,6,7)
(0,7,0), (0,7,1), (0,7,2), (0,7,3), (0,7,4), (0,7,5), (0,7,6), (0,7,7)
(1,0,0), (1,0,1), (1,0,2), (1,0,3), (1,0,4), (1,0,5), (1,0,6), (1,0,7)
(1,1,0), (1,1,1), (1,1,2), (1,1,3), (1,1,4), (1,1,5), (1,1,6), (1,1,7)
(1,2,0), (1,2,1), (1,2,2), (1,2,3), (1,2,4), (1,2,5), (1,2,6), (1,2,7)
(1,3,0), (1,3,1), (1,3,2), (1,3,3), (1,3,4), (1,3,5), (1,3,6), (1,3,7)
(1,4,0), (1,4,1), (1,4,2), (1,4,3), (1,4,4), (1,4,5), (1,4,6), (1,4,7)
(1,5,0), (1,5,1), (1,5,2), (1,5,3), (1,5,4), (1,5,5), (1,5,6), (1,5,7)
(1,6,0), (1,6,1), (1,6,2), (1,6,3), (1,6,4), (1,6,5), (1,6,6), (1,6,7)
(1,7,0), (1,7,1), (1,7,2), (1,7,3), (1,7,4), (1,7,5), (1,7,6), (1,7,7)
(2,0,0), (2,0,1), (2,0,2), (2,0,3), (2,0,4), (2,0,5), (2,0,6), (2,0,7)
(2,1,0), (2,1,1), (2,1,2), (2,1,3), (2,1,4), (2,1,5), (2,1,6), (2,1,7)
(2,2,0), (2,2,1), (2,2,2), (2,2,3), (2,2,4), (2,2,5), (2,2,6), (2,2,7)
(2,3,0), (2,3,1), (2,3,2), (2,3,3), (2,3,4), (2,3,5), (2,3,6), (2,3,7)
(2,4,0), (2,4,1), (2,4,2), (2,4,3), (2,4,4), (2,4,5), (2,4,6), (2,4,7)
(2,5,0), (2,5,1), (2,5,2), (2,5,3), (2,5,4), (2,5,5), (2,5,6), (2,5,7)
(2,6,0), (2,6,1), (2,6,2), (2,6,3), (2,6,4), (2,6,5), (2,6,6), (2,6,7)
(2,7,0), (2,7,1), (2,7,2), (2,7,3), (2,7,4), (2,7,5), (2,7,6), (2,7,7)
(3,0,0), (3,0,1), (3,0,2), (3,0,3), (3,0,4), (3,0,5), (3,0,6), (3,0,7)
(3,1,0), (3,1,1), (3,1,2), (3,1,3), (3,1,4), (3,1,5), (3,1,6), (3,1,7)
(3,2,0), (3,2,1), (3,2,2), (3,2,3), (3,2,4), (3,2,5), (3,2,6), (3,2,7)
(3,3,0), (3,3,1), (3,3,2), (3,3,3), (3,3,4), (3,3,5), (3,3,6), (3,3,7)
(3,4,0), (3,4,1), (3,4,2), (3,4,3), (3,4,4), (3,4,5), (3,4,6), (3,4,7)
(3,5,0), (3,5,1), (3,5,2), (3,5,3), (3,5,4), (3,5,5), (3,5,6), (3,5,7)
(3,6,0), (3,6,1), (3,6,2), (3,6,3), (3,6,4), (3,6,5), (3,6,6), (3,6,7)
(3,7,0), (3,7,1), (3,7,2), (3,7,3), (3,7,4), (3,7,5), (3,7,6), (3,7,7)
(4,0,0), (4,0,1), (4,0,2), (4,0,3), (4,0,4), (4,0,5), (4,0,6), (4,0,7)
(4,1,0), (4,1,1), (4,1,2), (4,1,3), (4,1,4), (4,1,5), (4,1,6), (4,1,7)
(4,2,0), (4,2,1), (4,2,2), (4,2,3), (4,2,4), (4,2,5), (4,2,6), (4,2,7)
(4,3,0), (4,3,1), (4,3,2), (4,3,3), (4,3,4), (4,3,5), (4,3,6), (4,3,7)
(4,4,0), (4,4,1), (4,4,2), (4,4,3), (4,4,4), (4,4,5), (4,4,6), (4,4,7)
(4,5,0), (4,5,1), (4,5,2), (4,5,3), (4,5,4), (4,5,5), (4,5,6), (4,5,7)
(4,6,0), (4,6,1), (4,6,2), (4,6,3), (4,6,4), (4,6,5), (4,6,6), (4,6,7)
(4,7,0), (4,7,1), (4,7,2), (4,7,3), (4,7,4), (4,7,5), (4,7,6), (4,7,7)
(5,0,0), (5,0,1), (5,0,2), (5,0,3), (5,0,4), (5,0,5), (5,0,6), (5,0,7)
(5,1,0), (5,1,1), (5,1,2), (5,1,3), (5,1,4), (5,1,5), (5,1,6), (5,1,7)
(5,2,0), (5,2,1), (5,2,2), (5,2,3), (5,2,4), (5,2,5), (5,2,6), (5,2,7)
(5,3,0), (5,3,1), (5,3,2), (5,3,3), (5,3,4), (5,3,5), (5,3,6), (5,3,7)
(5,4,0), (5,4,1), (5,4,2), (5,4,3), (5,4,4), (5,4,5), (5,4,6), (5,4,7)
(5,5,0), (5,5,1), (5,5,2), (5,5,3), (5,5,4), (5,5,5), (5,5,6), (5,5,7)
(5,6,0), (5,6,1), (5,6,2), (5,6,3), (5,6,4), (5,6,5), (5,6,6), (5,6,7)
(5,7,0), (5,7,1), (5,7,2), (5,7,3), (5,7,4), (5,7,5), (5,7,6), (5,7,7)
(6,0,0), (6,0,1), (6,0,2), (6,0,3), (6,0,4), (6,0,5), (6,0,6), (6,0,7)
(6,1,0), (6,1,1), (6,1,2), (6,1,3), (6,1,4), (6,1,5), (6,1,6), (6,1,7)
(6,2,0), (6,2,1), (6,2,2), (6,2,3), (6,2,4), (6,2,5), (6,2,6), (6,2,7)
(6,3,0), (6,3,1), (6,3,2), (6,3,3), (6,3,4), (6,3,5), (6,3,6), (6,3,7)
(6,4,0), (6,4,1), (6,4,2), (6,4,3), (6,4,4), (6,4,5), (6,4,6), (6,4,7)
(6,5,0), (6,5,1), (6,5,2), (6,5,3), (6,5,4), (6,5,5), (6,5,6), (6,5,7)
(6,6,0), (6,6,1), (6,6,2), (6,6,3), (6,6,4), (6,6,5), (6,6,6), (6,6,7)
(6,7,0), (6,7,1), (6,7,2), (6,7,3), (6,7,4), (6,7,5), (6,7,6), (6,7,7)
(7,0,0), (7,0,1), (7,0,2), (7,0,3), (7,0,4), (7,0,5), (7,0,6), (7,0,7)
(7,1,0), (7,1,1), (7,1,2), (7,1,3), (7,1,4), (7,1,5), (7,1,6), (7,1,7)
(7,2,0), (7,2,1), (7,2,2), (7,2,3), (7,2,4), (7,2,5), (7,2,6), (7,2,7)
(7,3,0), (7,3,1), (7,3,2), (7,3,3), (7,3,4), (7,3,5), (7,3,6), (7,3,7)
(7,4,0), (7,4,1), (7,4,2), (7,4,3), (7,4,4), (7,4,5), (7,4,6), (7,4,7)
(7,5,0), (7,5,1), (7,5,2), (7,5,3), (7,5,4), (7,5,5), (7,5,6), (7,5,7)
(7,6,0), (7,6,1), (7,6,2), (7,6,3), (7,6,4), (7,6,5), (7,6,6), (7,6,7)
(7,7,0), (7,7,1), (7,7,2), (7,7,3), (7,7,4), (7,7,5), (7,7,6), (7,7,7)
GPU toArray() result i.e., debugPrint(texBuffer);:
(0,0,0), (1,0,0), (2,0,0), (3,0,0), (4,0,0), (5,0,0), (6,0,0), (7,0,0)
(0,1,0), (1,1,0), (2,1,0), (3,1,0), (4,1,0), (5,1,0), (6,1,0), (7,1,0)
(0,2,0), (1,2,0), (2,2,0), (3,2,0), (4,2,0), (5,2,0), (6,2,0), (7,2,0)
(0,3,0), (1,3,0), (2,3,0), (3,3,0), (4,3,0), (5,3,0), (6,3,0), (7,3,0)
(0,4,0), (1,4,0), (2,4,0), (3,4,0), (4,4,0), (5,4,0), (6,4,0), (7,4,0)
(0,5,0), (1,5,0), (2,5,0), (3,5,0), (4,5,0), (5,5,0), (6,5,0), (7,5,0)
(0,6,0), (1,6,0), (2,6,0), (3,6,0), (4,6,0), (5,6,0), (6,6,0), (7,6,0)
(0,7,0), (1,7,0), (2,7,0), (3,7,0), (4,7,0), (5,7,0), (6,7,0), (7,7,0)
(0,0,0), (1,0,4), (2,4,5), (3,2,4), (4,3,4), (5,4,4), (6,5,4), (7,6,4)
(0,0,1), (1,5,5), (2,1,5), (3,2,5), (4,3,5), (5,4,5), (6,5,5), (7,6,5)
(0,2,1), (1,0,6), (2,1,6), (3,2,6), (4,3,6), (5,4,6), (6,5,6), (7,6,5)
(0,0,3), (1,0,7), (2,1,7), (3,2,7), (4,3,7), (5,4,7), (6,7,5), (7,6,7)
(0,0,0), (1,1,0), (2,2,0), (3,3,0), (4,4,0), (5,0,5), (6,6,0), (7,7,0)
(0,0,1), (1,1,1), (2,2,1), (3,3,1), (4,1,5), (5,5,1), (6,6,1), (7,7,1)
(0,0,2), (1,1,2), (2,2,2), (3,2,5), (4,4,2), (5,5,2), (6,6,2), (7,7,2)
(0,0,3), (1,1,3), (2,3,5), (3,3,3), (4,4,3), (5,5,3), (6,6,3), (7,7,3)
(0,0,0), (1,0,4), (2,0,4), (3,0,4), (4,0,4), (5,0,4), (6,0,4), (7,0,4)
(0,1,1), (1,1,5), (2,1,5), (3,1,5), (4,1,5), (5,1,5), (6,1,5), (7,1,5)
(0,2,2), (1,2,6), (2,2,6), (3,2,6), (4,2,6), (5,2,6), (6,2,6), (7,2,6)
(0,3,3), (1,3,7), (2,3,7), (3,3,7), (4,3,7), (5,3,7), (6,3,7), (7,3,7)
(0,4,0), (1,4,0), (2,4,0), (3,4,0), (4,4,0), (5,4,0), (6,4,0), (7,4,0)
(0,5,1), (1,5,1), (2,5,1), (3,5,1), (4,5,1), (5,5,1), (6,5,1), (7,5,1)
(0,6,2), (1,6,2), (2,6,2), (3,6,2), (4,6,2), (5,6,2), (6,6,2), (7,6,2)
(0,7,3), (1,7,3), (2,7,3), (3,7,3), (4,7,3), (5,7,3), (6,7,3), (7,7,3)
(0,0,3), (1,0,3), (2,0,3), (3,0,3), (4,0,3), (5,0,3), (6,0,3), (7,0,3)
(0,1,3), (1,1,3), (2,1,3), (3,1,3), (4,1,3), (5,1,3), (6,1,3), (7,1,3)
(0,2,3), (1,2,3), (2,2,3), (3,2,3), (4,2,3), (5,2,3), (6,2,3), (7,2,3)
(0,3,3), (1,3,3), (2,3,3), (3,3,3), (4,3,3), (5,3,3), (6,3,3), (7,3,3)
(0,4,3), (1,4,3), (2,4,3), (3,4,3), (4,4,3), (5,4,3), (6,4,3), (7,4,3)
(0,5,3), (1,5,3), (2,5,3), (3,5,3), (4,5,3), (5,5,3), (6,5,3), (7,5,3)
(0,6,3), (1,6,3), (2,6,3), (3,6,3), (4,6,3), (5,6,3), (6,6,3), (7,6,3)
(0,7,3), (1,7,3), (2,7,3), (3,7,3), (4,7,3), (5,7,3), (6,7,3), (7,7,3)
(0,0,4), (1,0,4), (2,0,4), (3,0,4), (4,0,4), (5,0,4), (6,0,4), (7,0,4)
(0,1,4), (1,1,4), (2,1,4), (3,1,4), (4,1,4), (5,1,4), (6,1,4), (7,1,4)
(0,2,4), (1,2,4), (2,2,4), (3,2,4), (4,2,4), (5,2,4), (6,2,4), (7,2,4)
(0,3,4), (1,3,4), (2,3,4), (3,3,4), (4,3,4), (5,3,4), (6,3,4), (7,3,4)
(0,4,4), (1,4,4), (2,4,4), (3,4,4), (4,4,4), (5,4,4), (6,4,4), (7,4,4)
(0,5,4), (1,5,4), (2,5,4), (3,5,4), (4,5,4), (5,5,4), (6,5,4), (7,5,4)
(0,6,4), (1,6,4), (2,6,4), (3,6,4), (4,6,4), (5,6,4), (6,6,4), (7,6,4)
(0,7,4), (1,7,4), (2,7,4), (3,7,4), (4,7,4), (5,7,4), (6,7,4), (7,7,4)
(0,0,0), (1,0,5), (2,1,5), (3,2,5), (4,3,5), (5,5,1), (6,5,5), (7,6,5)
(0,0,1), (1,0,6), (2,1,6), (3,2,6), (4,6,1), (5,4,6), (6,5,6), (7,6,6)
(0,0,2), (1,0,7), (2,1,7), (3,7,1), (4,3,7), (5,4,7), (6,5,7), (7,6,7)
(0,0,0), (1,1,0), (2,0,1), (3,3,0), (4,4,0), (5,5,0), (6,6,0), (7,7,0)
(0,0,1), (1,1,1), (2,2,1), (3,3,1), (4,4,1), (5,5,1), (6,6,1), (7,7,1)
(0,2,1), (1,1,2), (2,2,2), (3,3,2), (4,4,2), (5,5,2), (6,6,2), (7,2,1)
(0,0,3), (1,1,3), (2,2,3), (3,3,3), (4,4,3), (5,5,3), (6,3,1), (7,7,3)
(0,0,4), (1,1,4), (2,2,4), (3,3,4), (4,4,4), (5,4,1), (6,6,4), (7,7,4)
(0,0,0), (1,0,5), (2,0,5), (3,0,5), (4,0,5), (5,0,5), (6,0,5), (7,0,5)
(0,1,1), (1,1,6), (2,1,6), (3,1,6), (4,1,6), (5,1,6), (6,1,6), (7,1,6)
(0,2,2), (1,2,7), (2,2,7), (3,2,7), (4,2,7), (5,2,7), (6,2,7), (7,2,7)
(0,3,0), (1,3,0), (2,3,0), (3,3,0), (4,3,0), (5,3,0), (6,3,0), (7,3,0)
(0,4,1), (1,4,1), (2,4,1), (3,4,1), (4,4,1), (5,4,1), (6,4,1), (7,4,1)
(0,5,2), (1,5,2), (2,5,2), (3,5,2), (4,5,2), (5,5,2), (6,5,2), (7,5,2)
(0,6,3), (1,6,3), (2,6,3), (3,6,3), (4,6,3), (5,6,3), (6,6,3), (7,6,3)
(0,7,4), (1,7,4), (2,7,4), (3,7,4), (4,7,4), (5,7,4), (6,7,4), (7,7,4)
(0,0,7), (1,0,7), (2,0,7), (3,0,7), (4,0,7), (5,0,7), (6,0,7), (7,0,7)
(0,1,7), (1,1,7), (2,1,7), (3,1,7), (4,1,7), (5,1,7), (6,1,7), (7,1,7)
(0,2,7), (1,2,7), (2,2,7), (3,2,7), (4,2,7), (5,2,7), (6,2,7), (7,2,7)
(0,3,7), (1,3,7), (2,3,7), (3,3,7), (4,3,7), (5,3,7), (6,3,7), (7,3,7)
(0,4,7), (1,4,7), (2,4,7), (3,4,7), (4,4,7), (5,4,7), (6,4,7), (7,4,7)
(0,5,7), (1,5,7), (2,5,7), (3,5,7), (4,5,7), (5,5,7), (6,5,7), (7,5,7)
(0,6,7), (1,6,7), (2,6,7), (3,6,7), (4,6,7), (5,6,7), (6,6,7), (7,6,7)
(0,7,7), (1,7,7), (2,7,7), (3,7,7), (4,7,7), (5,7,7), (6,7,7), (7,7,7)
How important is this (1-5)?
Strikes me as a pretty integral issue since there appears to be a non-identical transformation between CPU and GPU buffers.
Expected behavior (i.e. solution)
Those two arrays should be the same (or at least differ by an obvious matrix transform/mapping), instead the toArray() buffer is filled with duplicate data and errors that don't map at all to the original CPU buffer.
- Lingua principale
- JavaScript
- Stelle
- 15.5k
- Fork
- 663
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di gpujs/gpu.js
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 65/100
-
WebGL backend silently returns all zeros for long-running kernels (no GL error, no context loss)Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 42/100
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 20/100
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
-
Bitwise result not correctAperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
Tutte le issue di gpujs/gpu.js
Issue simili
-
Complexity: Small P-Feature: Projects page ready for merge team role: back end/devOps role: front end size: 0.25pt
Difficoltà 1/5 1-3 ore Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 67/100
bellingcat/toolkit#905 ·
-
self-care self-care:docs-build-time-investigator
Difficoltà 2/5 Mezza giornata Idoneità per principianti 76/100
githubnext/gh-aw-cao#14191 ·
I maintainer di solito rispondono entro 1 giorno
-
effort:low impact:medium RAG status: auto-triaged
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
mastra-ai/mastra#25229 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
sugarlabs/musicblocks#8984 ·
I maintainer di solito rispondono entro 1 giorno