Skip to content

Commit

Permalink
Refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
sa2urami committed Dec 2, 2024
1 parent b83e2cd commit 642c37d
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 77 deletions.
1 change: 0 additions & 1 deletion prismarine-viewer/examples/Cube.comp.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ fn main(@builtin(global_invocation_id) global_id: vec3<u32>) {

let pos : vec2u = vec2u(u32((clipX + 1) / 2 * f32(textureSize.x)),u32((clipY + 1) / 2 * f32(textureSize.y)));

//atomicCompareExchangeWeak(&depthAtomic.locks[pos.x][pos.y], 1 ,u32(clipDepth * 2147483646));
let depth = u32(clipDepth * 4294967295);
var depthPrev = atomicMin(&depthAtomic.locks[pos.x][pos.y], depth);
//depthPrev = atomicLoad(&depthAtomic.locks[pos.x][pos.y]);
Expand Down
2 changes: 1 addition & 1 deletion prismarine-viewer/examples/Cube.vert.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ fn main(
}

var output: VertexOutput;
output.Position = ViewProjectionMatrix * ((position * normal) + cube_position);
output.Position = ViewProjectionMatrix * (position * normal + cube_position);
output.fragUV = uv;
output.TextureIndex = textureIndex;
output.ColorBlend = colorBlend;
Expand Down
5 changes: 1 addition & 4 deletions prismarine-viewer/examples/CubeDef.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,4 @@ export const quadVertexArray = new Float32Array([
0.5, 0.5, 0.5, 1, 1, // top-right
-0.5, -0.5, 0.5, 0, 0, // bottom-let
-0.5, 0.5, 0.5, 0, 1, // top-let


])

])
86 changes: 15 additions & 71 deletions prismarine-viewer/examples/webgpuRenderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,6 @@ export class WebgpuRenderer {
],
})


const textureSizeBindGroupLayout = device.createBindGroupLayout({
entries: [
{
Expand Down Expand Up @@ -523,50 +522,21 @@ export class WebgpuRenderer {
return debugData
}



createNewDataBuffers () {
const oldCubesBuffer = this.cubesBuffer
const oldVisibleCubesBuffer = this.visibleCubesBuffer

// Create buffers for compute shader and indirect drawing
this.cubesBuffer = this.device.createBuffer({
label: 'cubesBuffer',
size: this.NUMBER_OF_CUBES * 12,
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC,
})

this.chunksBuffer = this.device.createBuffer({
label: 'chunksBuffer',
size: 65_535 * 12, // 8 floats per cube - minimum buffer size
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC,
})
this.cubesBuffer = this.chunksBuffer = this.createVertexStorage(this.NUMBER_OF_CUBES * 12, "cubesBuffer")

this.modelsBuffer = this.device.createBuffer({
label: 'modelsBuffer',
size: 20_000 * 12,
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC,
})
this.chunksBuffer = this.createVertexStorage(65_535 * 12, "chunksBuffer")

this.modelsBuffer = this.createVertexStorage(20_000 * 12, "modelsBuffer")

this.occlusionTexture = this.createVertexStorage(4096 * 4096 * 4, "visibleCubesBuffer")

this.occlusionTexture = this.device.createBuffer({
label: 'visibleCubesBuffer',
size: 4096 * 4096 * 4,
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC,
})
this.DepthTextureBuffer = this.createVertexStorage(4096 * 4096 * 4, "visibleCubesBuffer")

this.DepthTextureBuffer = this.device.createBuffer({
label: 'visibleCubesBuffer',
size: 4096 * 4096 * 4,
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC,
})

this.visibleCubesBuffer = this.device.createBuffer({
label: 'visibleCubesBuffer',
size: this.NUMBER_OF_CUBES * 4 * 6,
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC,
})
this.visibleCubesBuffer = this.createVertexStorage(this.NUMBER_OF_CUBES * 4 * 6, "visibleCubesBuffer")

if (oldCubesBuffer) {
this.commandEncoder.copyBufferToBuffer(oldCubesBuffer, 0, this.cubesBuffer, 0, this.realNumberOfCubes * 8)
Expand All @@ -575,6 +545,14 @@ export class WebgpuRenderer {
this.createUniformBindGroup(this.device, this.pipeline)
}

private createVertexStorage(size:number, label:string) {
return this.device.createBuffer({
label,
size: size,
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC,
})
}

removeOne () { }

realNumberOfCubes = 0
Expand Down Expand Up @@ -666,33 +644,6 @@ export class WebgpuRenderer {
this.device.queue.writeBuffer(this.cubesBuffer, 0, cubeFlatData)
this.device.queue.writeBuffer(this.chunksBuffer, 0, chunksBuffer)

// Object.defineProperty(window, 'getBufferBlocksPositions', {
// get () {
// let minX = 0
// let minZ = 0
// let maxX = 0
// let maxZ = 0
// for (let i = 0; i < positions.length; i += 3) {
// const x = positions[i]
// const z = positions[i + 2]
// minX = Math.min(minX, x)
// minZ = Math.min(minZ, z)
// maxX = Math.max(maxX, x)
// maxZ = Math.max(maxZ, z)
// }
// console.log({ minX, minZ, maxX, maxZ })
// let str = ''
// for (let x = -minX; x <= maxX; x++) {
// for (let z = -minZ; z <= maxZ; z++) {
// const hasBlock = allSides.some(side => side && side[0] === x && side[2] === z)
// str += hasBlock ? 'X' : ' '
// }
// str += '\n'
// }
// return str
// },
// })

this.notRenderedAdditions++
console.timeEnd('updateSides')
this.waitingNextUpdateSidesOffset = undefined
Expand All @@ -711,9 +662,6 @@ export class WebgpuRenderer {
return camera
})()

// debugBlockPositions() {}


loop (forceFrame = false) {
const nextFrame = () => {
requestAnimationFrame(() => {
Expand Down Expand Up @@ -818,7 +766,6 @@ export class WebgpuRenderer {

this.commandEncoder = device.createCommandEncoder()
//this.commandEncoder.clearBuffer(this.occlusionTexture)
//this.commandEncoder.

//this.commandEncoder.clearBuffer(this.DepthTextureBuffer);
this.commandEncoder.clearBuffer(this.occlusionTexture)
Expand All @@ -832,7 +779,6 @@ export class WebgpuRenderer {

this.updateCubesBuffersDataFromLoop()
if (this.realNumberOfCubes) {

{
const computePass = this.commandEncoder.beginComputePass()
computePass.label = 'ComputePass'
Expand All @@ -858,9 +804,6 @@ export class WebgpuRenderer {
device.queue.submit([this.commandEncoder.finish()])
}
this.commandEncoder = device.createCommandEncoder()
//device.queue.submit([commandEncoder.finish()]);
// Render pass
//console.log(this.indirectDrawBuffer.getMappedRange());
const renderPass = this.commandEncoder.beginRenderPass(this.renderPassDescriptor)
renderPass.label = 'RenderPass'
renderPass.setPipeline(pipeline)
Expand All @@ -876,6 +819,7 @@ export class WebgpuRenderer {
renderPass.setViewport(this.canvas.width / 2, this.canvas.height / 2, this.canvas.width / 2, this.canvas.height / 2, 0, 0)
renderPass.drawIndirect(this.indirectDrawBuffer, 0)
}

renderPass.end()
}

Expand Down

0 comments on commit 642c37d

Please sign in to comment.