Skip to content

Revise partial_bindless release note#24506

Open
alice-i-cecile wants to merge 4 commits into
bevyengine:release-0.19.0from
alice-i-cecile:more-release-note-revisions
Open

Revise partial_bindless release note#24506
alice-i-cecile wants to merge 4 commits into
bevyengine:release-0.19.0from
alice-i-cecile:more-release-note-revisions

Conversation

@alice-i-cecile
Copy link
Copy Markdown
Member

Objective

Tone was too insincere marketing, and it used LLM-standard constructions.

While this was hand-written, the register drifted into marketing — complete with em-dash asides and "it's not X; it's Y".

Solution

Rewrite it, tightening the phrasing and cutting out some connective material. Mourn the loss of my precious — and accept that the fight is a lost cause.

Add a proper conclusion while we're here.

Comment thread _release-content/release-notes/partial_bindless_metal.md Outdated
@alice-i-cecile alice-i-cecile added this to the 0.19 milestone May 31, 2026
@alice-i-cecile alice-i-cecile added C-Docs An addition or correction to our documentation D-Straightforward Simple bug fixes and API improvements, docs, test and examples S-Needs-Review Needs reviewer attention (from anyone!) to move forward labels May 31, 2026
Copy link
Copy Markdown
Contributor

@amtep amtep left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great.
It's not just a revision — it's an improvement in readability.

Release notes must constantly navigate real tension between advertising new features and sounding too promotional — often at the cost of clarity — but these changes perform admirably.

@beicause
Copy link
Copy Markdown
Member

Why does this emphasize it's an improvement for Metal? Doesn't DX12 also support TEXTURE_BINDING_ARRAY but not BUFFER_BINDING_ARRAY?

https://docs.rs/wgpu/latest/wgpu/struct.FeaturesWGPU.html#associatedconstant.BUFFER_BINDING_ARRAY

@alice-i-cecile
Copy link
Copy Markdown
Member Author

Hmm, good question! That framing was inherited from #23436. Perhaps @holg or @pcwalton can comment?

@alice-i-cecile alice-i-cecile added S-Needs-Help The author needs help finishing this PR. and removed S-Needs-Review Needs reviewer attention (from anyone!) to move forward labels May 31, 2026
@alice-i-cecile alice-i-cecile requested a review from beicause May 31, 2026 20:48
@alice-i-cecile alice-i-cecile added S-Needs-Review Needs reviewer attention (from anyone!) to move forward and removed S-Needs-Help The author needs help finishing this PR. labels May 31, 2026
Comment thread _release-content/release-notes/partial_bindless_metal.md Outdated
Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com>
Metal (Apple's GPU API) supports texture binding arrays but not buffer binding arrays.
Bevy required both to enable bindless, which previously excluded Metal entirely — even for materials that never use buffer arrays.
If you were shipping on Mac or iOS, your game was running on a slower, fundamentally different code path.
Both Metal (Apple's GPU API) and DX12 (an older Windows API) have partial bindless support:
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dx12 is also a modern api

Suggested change
Both Metal (Apple's GPU API) and DX12 (an older Windows API) have partial bindless support:
Both Metal (Apple's GPU API) and DX12 (a Windows graphics API) have partial bindless support:

The sampler limit check was testing the wrong metric: `max_samplers_per_shader_stage` counts binding slots, but the relevant limit is `max_binding_array_sampler_elements_per_shader_stage`, the array element count a mismatch that could silently exceed hardware limits.
Bevy now also skips creating binding array slots for resource types a material doesn't use, staying within Metal's hard 31 argument buffer slot limit and reducing overhead on all platforms.
We've also fixed two important correctness bugs in the process.
First, we discovered that the sampler limit check was testing the wrong metric: `max_samplers_per_shader_stage` counts binding slots, but the relevant limit is `max_binding_array_sampler_elements_per_shader_stage`, the array element count (a mismatch that could silently exceed hardware limits).
Copy link
Copy Markdown
Member

@beicause beicause Jun 1, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems max_binding_array_sampler_elements_per_shader_stage is larger than max_samplers_per_shader_stage so it's unlikely to exceed.

Suggested change
First, we discovered that the sampler limit check was testing the wrong metric: `max_samplers_per_shader_stage` counts binding slots, but the relevant limit is `max_binding_array_sampler_elements_per_shader_stage`, the array element count (a mismatch that could silently exceed hardware limits).
First, we discovered that the sampler limit check was testing the wrong metric: `max_samplers_per_shader_stage` counts binding slots, but the relevant limit is `max_binding_array_sampler_elements_per_shader_stage`, the array element count (a mismatch that could incorrectly disable bindless).

Most materials, including `StandardMaterial`, do not need buffer array support.
To ensure those materials take the fast path, Bevy now checks the actual needs of each material.
If you only need texture arrays, your material can be rendered efficiently across Bevy's desktop platforms.
If you use `#[uniform(..., binding_array(...))]`, expect unusually poor performance when using Metal or DX12.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel "poor performance" is a bit too harsh.

Copy link
Copy Markdown
Contributor

@tbillington tbillington left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sorry for the hassle, I do think this reads better now though!

Windows, Mac, Linux, mobile — with confidence that it will just work.
That's a tough promise to live up to: rendering complex scenes on Mac and iOS was markedly slower.
In an ideal world, Bevy users could write a single application and ship it everywhere, with every last one of the messy cross-platform differences beautifully abstracted away.
That can be a bit hard though.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could probably omit this sentence, it doesn't really do anything imo

Comment on lines +9 to +11
In this particular case, we found that rendering complex scenes on Mac and iOS was markedly slower than it should have been.

Looking into it, the lack of bindless rendering support was to blame.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

these are fine, but feels a little handwavey? like "we found" and "looking into it" just feel wishywashy haha

it would come across stronger if there was more concrete background like "In previous versions of Bevy user reports and benchmarks of complex scenes on mac and iOS showed much worse performance than other platforms. After investigation of the graphics pipeline used we found that it wasn't taking advantage of bindless rendering where it could." (continues into line 12)

@holg
Copy link
Copy Markdown
Contributor

holg commented Jun 1, 2026

Hmm, good question! That framing was inherited from #23436. Perhaps @holg or @pcwalton can comment?

Well actually this is bcs i focused on Metal improvement in first place, and later realized DX12 did improve well, too

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

C-Docs An addition or correction to our documentation D-Straightforward Simple bug fixes and API improvements, docs, test and examples S-Needs-Review Needs reviewer attention (from anyone!) to move forward

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants