Merge pull request 'perf(mesh): release per-mesh scratch buffer for static BLAS (#66)' (#104) from claude/issue-66 into master
This commit is contained in:
commit
39b882a9cb
2 changed files with 33 additions and 0 deletions
|
|
@ -152,6 +152,23 @@ namespace {
|
|||
|
||||
self.buildFlags = flags;
|
||||
self.builtPrimitiveCount = primitiveCount;
|
||||
|
||||
// Static (!allowUpdate) meshes can never refit, so their per-mesh
|
||||
// scratch is dead weight the moment this build's GPU work completes —
|
||||
// release it instead of keeping a persistent DEVICE_LOCAL allocation
|
||||
// per mesh (the waste that dominates many-mesh scenes, issue #66). The
|
||||
// fresh build recorded above still reads scratchBuffer.address from
|
||||
// this command buffer, so a plain Clear() would be a use-after-free;
|
||||
// DeferredClear() retires the allocation only once the build's frame
|
||||
// has passed its fence (the queue from #101/#102). A later Refit on a
|
||||
// static mesh takes the rebuild fallback, whose Resize sees the nulled
|
||||
// handle and re-Creates the scratch. Refit-capable meshes keep theirs:
|
||||
// an in-place UPDATE reuses it every frame (build scratch ≥ update
|
||||
// scratch, so no resize). Only applies to a fresh build — an UPDATE
|
||||
// never reaches here for a static mesh.
|
||||
if (!update && !self.allowUpdate) {
|
||||
self.scratchBuffer.DeferredClear();
|
||||
}
|
||||
}
|
||||
|
||||
void RecordBLASBuild(Mesh& self, std::uint32_t vertexCount, std::uint32_t indexCount, VkBuildAccelerationStructureFlagsKHR flags, bool update, VkCommandBuffer cmd) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue