[Backport release/3.0.0] Replace map transforms with pre-owned and reused buffer (#7233) - #7566
Conversation
|
run-ci |
There was a problem hiding this comment.
Isaac Lab Review Bot
The backport replaces legacy OVRTX map/unmap transform updates with direct binding writes: object transforms use a persistent caller-owned Warp buffer, while camera transforms write their per-update Warp buffer using the cached device stream.
- Design and architecture: The new object-transform buffer is isolated to the legacy renderer path and has a coherent lifecycle: initialized with legacy fields, allocated with the transform bindings, required by the update guard, and released during close. The ovstage path and dispatch structure remain unchanged.
- API: No public symbols, signatures, defaults, or exports change. The package includes the required past-tense changelog fragment, and the cached
self._warp_device.stream.cuda_streamusage preserves the release branch's established device-handling behavior. - Implementation: The persistent buffer length matches the Newton index count and kernel launch dimension, and both writes use the existing
DataAccess.ASYNCplus cached Warp stream convention. Tests cover the buffer passed to the object kernel and binding, camera write behavior, stream propagation, and close-time release. A non-blocking clarity issue remains: the comment calling the objectwrite()blocking can appear inconsistent withDataAccess.ASYNC, while the camera path intentionally retains a per-update allocation rather than adopting the object's persistent-buffer lifecycle.
No blocking issues. No inline issue met the actionable-evidence threshold; the assessment above records the review feedback.
Automated review; human maintainers own approval decisions.
Greptile SummaryThis backport replaces per-frame mapped OVRTX transform updates with caller-owned Warp buffers and cached CUDA-stream writes.
Confidence Score: 5/5The PR appears safe to merge with no concrete changed-code failure identified. The transform buffers are initialized consistently with their bindings, use the renderer’s cached device stream, and are cleaned up with the legacy renderer state; the added tests cover the intended write contract. Important Files Changed
Reviews (1): Last reviewed commit: "Replace map transforms with pre-owned an..." | Re-trigger Greptile |
mmichelis
left a comment
There was a problem hiding this comment.
Backport looks correct!
Description
Backport of #7233 (Replace map transforms with pre-owned and reused buffer) to
release/3.0.0.This supersedes #7300, which was the original cherry-pick by @pbarejko. That PR was approved on 2026-08-24 but has been unmergeable (
mergeable=false,dirty) ever since, so the fix never reached the release branch. Authorship of the commit is preserved as @pbarejko.Why it conflicted
ovrtx_renderer.pydiverged structurally betweendevelopandrelease/3.0.0. The backport of #7347 (landed as #7353) was not a line-for-line cherry-pick — ondevelop#7347 changed 11 lines of that file, while the release-side version changed 1348 (240+/1108−) and restructured code that now only exists in that shape on the release branch:_close_legacywas rewritten from explicit per-binding unbinds into afor attr, name in (...)loopexcept Exception as ewas renamed toas excThe three-week-old cherry-pick was written against the pre-#7353 shape, hence the conflicts.
Conflict resolution
_close_legacykeeps the release branch's loop form and adds only Replace map transforms with pre-owned and reused buffer #7233's semantic contribution (self._object_transform_buffer = None). Takingdevelop's shape here would have silently reverted [Backport] PR #7347 to release/3.0.0 #7353.Reformatcommit was a single blank line already covered by the resolution, so it drops out as a no-op.One deliberate change from the original PR
#7233 predates #7169, so it wrote
cuda_stream=wp.get_stream(self._device).cuda_stream.release/3.0.0has since taken #7169 and standardized onself._warp_device.stream.cuda_stream— that caching is #7169's fix. Applying the original patch verbatim would have reintroduced a per-call device lookup into the per-frame transform path, partially undoing a fix already on the branch.Both new call sites and the two new tests are aligned to the release idiom instead. This is the one substantive delta from what was approved on #7300 and is the part most worth a reviewer's attention.
Type of change
Release backport
This PR targets
release/3.0.0directly; the change is already ondevelopvia #7233.Testing
source/isaaclab_ov/test/test_ovrtx_deformable_bindings.py— 19 passedsource/isaaclab_ov/test/test_ovrtx_renderer_contract.py— 37 passedtest_update_transforms_writes_caller_owned_buffer,test_update_camera_writes_without_mapping) were confirmed to fail against the unpatched release renderer and pass with the change.Checklist
pre-commitchecks with./isaaclab.sh --formatsource/<pkg>/changelog.d/for every touched packageCONTRIBUTORS.mdor my name already exists there