Skip to content

Commit

Permalink
TIL it is not enough to end a wgpu render pass, you also have to expl…
Browse files Browse the repository at this point in the history
…icitly release it.
  • Loading branch information
martinfouilleul committed Oct 8, 2024
1 parent 4547172 commit b594781
Showing 1 changed file with 15 additions and 1 deletion.
16 changes: 15 additions & 1 deletion src/graphics/wgpu_renderer.c
Original file line number Diff line number Diff line change
Expand Up @@ -3355,6 +3355,7 @@ void oc_wgpu_canvas_submit(oc_canvas_renderer_base* rendererBase,
wgpuRenderPassEncoderSetViewport(pass, 0.f, 0.f, screenSize.x, screenSize.y, 0.f, 1.f);
}
wgpuRenderPassEncoderEnd(pass);
wgpuRenderPassEncoderRelease(pass);
}

//----------------------------------------------------------------------------------------
Expand All @@ -3378,6 +3379,7 @@ void oc_wgpu_canvas_submit(oc_canvas_renderer_base* rendererBase,
wgpuRenderPassEncoderSetViewport(pass, 0.f, 0.f, screenSize.x, screenSize.y, 0.f, 1.f);
}
wgpuRenderPassEncoderEnd(pass);
wgpuRenderPassEncoderRelease(pass);
}

/*NOTE(martin): On dispatch limits.
Expand Down Expand Up @@ -3433,6 +3435,7 @@ void oc_wgpu_canvas_submit(oc_canvas_renderer_base* rendererBase,
wgpuComputePassEncoderDispatchWorkgroups(pass, workGroupCountX, workGroupCountY, 1);
}
wgpuComputePassEncoderEnd(pass);
wgpuComputePassEncoderRelease(pass);
}

//----------------------------------------------------------------------------------------
Expand All @@ -3457,6 +3460,7 @@ void oc_wgpu_canvas_submit(oc_canvas_renderer_base* rendererBase,
wgpuComputePassEncoderDispatchWorkgroups(pass, workGroupCountX, 1, 1);
}
wgpuComputePassEncoderEnd(pass);
wgpuComputePassEncoderRelease(pass);
}

//----------------------------------------------------------------------------------------
Expand All @@ -3478,6 +3482,7 @@ void oc_wgpu_canvas_submit(oc_canvas_renderer_base* rendererBase,
wgpuComputePassEncoderDispatchWorkgroups(pass, workGroupCountX, workGroupCountY, 1);
}
wgpuComputePassEncoderEnd(pass);
wgpuComputePassEncoderRelease(pass);
}

//----------------------------------------------------------------------------------------
Expand All @@ -3498,6 +3503,7 @@ void oc_wgpu_canvas_submit(oc_canvas_renderer_base* rendererBase,
wgpuComputePassEncoderDispatchWorkgroups(pass, workGroupCountX, workGroupCountY, 1);
}
wgpuComputePassEncoderEnd(pass);
wgpuComputePassEncoderRelease(pass);
}

//----------------------------------------------------------------------------------------
Expand All @@ -3517,6 +3523,7 @@ void oc_wgpu_canvas_submit(oc_canvas_renderer_base* rendererBase,
wgpuComputePassEncoderDispatchWorkgroups(pass, workGroupCountX, workGroupCountY, 1);
}
wgpuComputePassEncoderEnd(pass);
wgpuComputePassEncoderRelease(pass);
}

//----------------------------------------------------------------------------------------
Expand All @@ -3533,6 +3540,7 @@ void oc_wgpu_canvas_submit(oc_canvas_renderer_base* rendererBase,
wgpuComputePassEncoderDispatchWorkgroups(pass, 1, 1, 1);
}
wgpuComputePassEncoderEnd(pass);
wgpuComputePassEncoderRelease(pass);
}

//----------------------------------------------------------------------------------------
Expand Down Expand Up @@ -3571,6 +3579,7 @@ void oc_wgpu_canvas_submit(oc_canvas_renderer_base* rendererBase,
wgpuComputePassEncoderDispatchWorkgroupsIndirect(pass, renderer->tileQueueCountBuffer, 0);
}
wgpuComputePassEncoderEnd(pass);
wgpuComputePassEncoderRelease(pass);
}

//----------------------------------------------------------------------------------------
Expand Down Expand Up @@ -3598,6 +3607,7 @@ void oc_wgpu_canvas_submit(oc_canvas_renderer_base* rendererBase,
wgpuRenderPassEncoderDraw(pass, 4, 1, 0, 0);
}
wgpuRenderPassEncoderEnd(pass);
wgpuRenderPassEncoderRelease(pass);
}

// submit to queue
Expand Down Expand Up @@ -3644,6 +3654,7 @@ void oc_wgpu_canvas_submit(oc_canvas_renderer_base* rendererBase,
}
}
wgpuRenderPassEncoderEnd(pass);
wgpuRenderPassEncoderRelease(pass);
}

//NOTE: resolve frame timestamps
Expand Down Expand Up @@ -3808,7 +3819,10 @@ void oc_wgpu_canvas_destroy(oc_canvas_renderer_base* base)
#undef release_buffer_if_needed

// release query set
wgpuQuerySetRelease(renderer->timestampsQuerySet);
if(renderer->timestampsQuerySet)
{
wgpuQuerySetRelease(renderer->timestampsQuerySet);
}

// release texture views and sample
if(renderer->batchTextureView)
Expand Down

0 comments on commit b594781

Please sign in to comment.