You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fixes from an adversarial pre-push review of the prepass rework:
- Gate setSupportIndirectCommandBuffers on MTLMeshRenderPipelineDescriptor
behind macOS 14 / iOS 17 / tvOS 18.1 / visionOS 2.1: the property is one
OS generation newer there than mesh pipelines themselves, so macOS 13 /
iOS 16 would hit an unrecognized selector. Mesh pipelines created without
the flag fall back to the per-draw loop.
- Raise the ICB availability floor to macOS 10.15 / iOS 13 / tvOS 13:
inheritPipelineState needs iOS/tvOS 13, and useResource:usage: only
participates in hazard tracking from macOS 10.15 / iOS 13, which the
deferred generation relies on.
- Fix the tvOS entry in the ICB feature-set table (tvOS_GPUFamily1_v2
admitted the Apple2-class A8; the floor is tvOS_GPUFamily2_v2 / A10X).
- Drop the begin_render_pass debug_assert on the deferred queue: wgpu-core
legally records discarded-surface fixup clears (render passes) in the
internal pre-pass before draining the queue.
- Cache generation-kernel compile failures so a driver that rejects the
library doesn't recompile it on every multi-draw call.
- Report the retry error (the pipeline's real problem) when creation fails
both with and without the ICB flag, and log a breadcrumb when a pipeline
is silently downgraded to non-ICB.
- Use the stage-scoped useResource for the ICB-referenced index buffer.
The ICB itself keeps the stage-less variant: it is consumed by command
ingestion, not a shader stage, and the stage-scoped call was observed on
M4 to make the executed draws render nothing.
- Rename the stale MULTI_DRAW_INDIRECT_BIND_GROUP_FALLBACK test (bind
groups no longer force a fallback; the test now verifies bind-group
inheritance through the ICB path), document the test-count constant's
coupling to ICB_MIN_DRAW_COUNT, document the hal contract in the
changelog, and correct the ICB bind-count constant's rationale.
Copy file name to clipboardExpand all lines: CHANGELOG.md
+5-4Lines changed: 5 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -44,14 +44,15 @@ Bottom level categories:
44
44
45
45
### Added/New Features
46
46
47
-
#### Hal
48
-
49
-
- Add `BufferBinding::buffer`, a public read accessor for the bound buffer, which was previously inaccessible to out-of-tree `wgpu_hal::Api` implementations. By @danlehmann in [#9820](https://github.com/gfx-rs/wgpu/pull/9820).
50
-
51
47
#### Metal
52
48
53
49
- Metal now lowers fixed-count `multi_draw_indirect` / `multi_draw_indexed_indirect` (and their mesh-task counterpart) with 8 or more draws to GPU-generated indirect command buffers. The generation compute runs in the internal pre-pass command buffer that already carries indirect-draw validation, so the render pass is never interrupted. By @matthargett in [#9640](https://github.com/gfx-rs/wgpu/pull/9640).
54
50
51
+
#### Hal
52
+
53
+
- Add `BufferBinding::buffer`, a public read accessor for the bound buffer, which was previously inaccessible to out-of-tree `wgpu_hal::Api` implementations. By @danlehmann in [#9820](https://github.com/gfx-rs/wgpu/pull/9820).
54
+
- Added `CommandEncoder::encode_deferred_multi_draws` (default no-op). Backends may defer part of the work for indirect multi-draws recorded in a render pass; after ending such a pass, callers must invoke this method while recording a command buffer that the queue executes before the pass's. wgpu-core does this in its internal pre-pass. By @matthargett in [#9640](https://github.com/gfx-rs/wgpu/pull/9640).
0 commit comments