QBnd: sample the boundary texture with POINT filtering#344
Open
ggalgoczi wants to merge 2 commits into
Open
Conversation
760b0cb to
d4311d7
Compare
The boundary QTex was sampled with cudaFilterModeLinear, blending ~0.4% from the adjacent (categorically distinct) material/surface row on large (>5000-row) bnd tables, corrupting every per-photon material/surface lookup. Switch to POINT filtering (QBND_FILTER_POINT; run with =1). POINT also makes the wavelength axis nearest-bin, so qbnd::boundary_lookup recovers G4-style per-wavelength linear interpolation via a manual 2-tap lerp (material axis stays POINT). The two go together -- nearest-bin wavelength sampling alone is ~2.3% low on the dRICH count.
d4311d7 to
1961ad1
Compare
1961ad1 to
3f7e400
Compare
plexoos
requested changes
Jun 1, 2026
Member
plexoos
left a comment
There was a problem hiding this comment.
I agree that boundary_lookup likely needs a correction here. As described, cudaFilterModeLinear appears to introduce cross-row blending on sufficiently large boundary textures, and that is a correctness issue because the y axis indexes categorical material/surface rows.
A few follow-ups would make the change easier to review:
- Please expand the PR description in plain English. It would help to explain that the boundary table is packed into a 2D texture,
xis wavelength,yis the material/surface row, why linear filtering was attractive originally, and why cross-row blending is a problem here. - Please add a reproducer that demonstrates the impact at the physics level if possible, for example wavelength distribution, hit counts, or another observable using one of the existing test geometries. At minimum, a focused regression test showing the cross-row contamination on a tall
bndtable would help. - Please route the toggle through the existing
Configmachinery rather than introducing a raw env var as the primary interface. An env var override is fine, but the default should preserve the current behavior for now. - If this remains configurable, the configuration should gate the full lookup strategy consistently. Right now the manual interpolation path changes in
qbnd.h, while the texture filter mode only changes when the env var is set.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
cudaFilterModeLinear blends ~0.4% from the adjacent (categorically distinct) material/surface row on large (>5000-row) bnd tables, corrupting every per-photon material/surface lookup. Add a POINT-mode path selected by QBND_FILTER_POINT (run with QBND_FILTER_POINT=1).