Skip to content

Commit

Permalink
Queue should never run full and remove async on render routine
Browse files Browse the repository at this point in the history
  • Loading branch information
s-macke committed Jun 26, 2024
1 parent 04b138d commit 46dfb69
Show file tree
Hide file tree
Showing 7 changed files with 24 additions and 15 deletions.
4 changes: 2 additions & 2 deletions src/scripts/AbstractGPURunner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ export interface GPURunner {
getRenderInfo(): {textures: Texture[], fragmentShaderFilenames: string[]};
getCommandBuffer(): GPUCommandBuffer;
Run(): Promise<void>;
Render(): Promise<void>;
Render(): void;
Init(): Promise<void>;
Destroy(): Promise<void>;
}
Expand All @@ -24,7 +24,7 @@ export abstract class GPUAbstractRunner implements GPURunner {
public abstract Init(): Promise<void>
public abstract Run(): Promise<void>

Render(): Promise<void> {
Render() {
throw new Error("Method not implemented.");
}

Expand Down
2 changes: 1 addition & 1 deletion src/scripts/GPURenderRunner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ export class GPURenderRunner implements GPURunner {
this.runner = runner
}

async Render() {
Render() {
GPU.device.queue.submit([this.render.getCommandBuffer()])
}

Expand Down
25 changes: 17 additions & 8 deletions src/scripts/RunGPURunner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ async function SwitchToGraphic() {
document.getElementById("screen").style.height = "100%"
}

async function InitRunner(runner: GPURunner) : Promise<boolean> {
async function InitRunner(runner: GPURunner): Promise<boolean> {
stop_immediately = false;
try {
await runner.Init()
Expand Down Expand Up @@ -89,7 +89,7 @@ async function HandleAnimation(runner: GPURunner) {
let frame = async () => {
try {
await runner.Run()
await runner.Render()
runner.Render()
await GPU.device.queue.onSubmittedWorkDone()
} catch (e) {
ShowError("GPU error", e as Error)
Expand Down Expand Up @@ -117,7 +117,7 @@ async function HandleAsyncAnimation(runner: GPURunner) {
// never return from this function unless the animation is stopped
await new Promise(async resolve => {
let nIter = 0
let queuePartFinished = async() => {
let queuePartFinished = async () => {
if (stop_immediately) {
return
}
Expand All @@ -126,12 +126,22 @@ async function HandleAsyncAnimation(runner: GPURunner) {
GPU.device.queue.onSubmittedWorkDone().then(() => queuePartFinished())
}
// fill the queue
queuePartFinished().then(r => {})
queuePartFinished().then(r => {})
queuePartFinished().then(r => {
})
queuePartFinished().then(r => {
})

let renderFinished = true
let frame = async () => {
try {
await runner.Render()
// don't Render if old render is not yet finished
if (renderFinished) {
runner.Render()
renderFinished = false
GPU.device.queue.onSubmittedWorkDone().then(() => {
renderFinished = true
})
}
} catch (e) {
ShowError("GPU error", e as Error)
await runner.Destroy()
Expand Down Expand Up @@ -180,7 +190,6 @@ async function HandleBenchmark(runner: GPURunner) {
}



let mutex = Promise.resolve();

export async function HandleRunner(runner: GPURunner) {
Expand All @@ -194,7 +203,7 @@ export async function HandleRunner(runner: GPURunner) {
await ResetHTML()
ListenToError();

if (! await InitRunner(runner)) return Promise.resolve();
if (!await InitRunner(runner)) return Promise.resolve();

const type = runner.getType()
switch (type) {
Expand Down
2 changes: 1 addition & 1 deletion src/scripts/fluid/fluid.ts
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ export class Fluid extends GPUAbstractRunner {
//await GPU.Render(this.poisson.pressurea);
}

async Render() {
Render() {
GPU.device.queue.submit([
this.render.GetCommandBuffer()
])
Expand Down
2 changes: 1 addition & 1 deletion src/scripts/light/light.ts
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ export class LightPropagation extends GPUAbstractRunner {
GPU.device.queue.submit([this.scene.GetCommandBuffer(), this.GetCommandBuffer()]);
}

async Render() {
Render() {
GPU.device.queue.submit([this.render.getCommandBuffer()]);
}
}
2 changes: 1 addition & 1 deletion src/scripts/light2/light.ts
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ export class LightPropagation2 extends GPUAbstractRunner {
GPU.device.queue.submit([this.scene.GetCommandBuffer(), this.GetCommandBuffer()]);
}

async Render() {
Render() {
GPU.device.queue.submit([this.render.getCommandBuffer()]);
}
}
2 changes: 1 addition & 1 deletion src/scripts/light_monte_carlo_path_tracing/light.ts
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ export class LightMonteCarloPathTracing extends GPUAbstractRunner {
GPU.device.queue.submit([this.scene.GetCommandBuffer(), this.GetCommandBuffer()]);
}

async Render() {
Render() {
GPU.device.queue.submit([this.render.getCommandBuffer()]);
}

Expand Down

0 comments on commit 46dfb69

Please sign in to comment.