Skip to content

Optimize resource upload in D3D11#48282

Merged
reflectronic merged 2 commits intozed-industries:mainfrom
reflectronic:optimize-d3d11-upload
Feb 3, 2026
Merged

Optimize resource upload in D3D11#48282
reflectronic merged 2 commits intozed-industries:mainfrom
reflectronic:optimize-d3d11-upload

Conversation

@reflectronic
Copy link
Member

Currently, each time we draw a primitive batch, we fully overwrite the instance buffer with the contents of the new batch. Since we use a write-only mapping to do this, the GPU driver may handle synchronization hazards by transparently creating new allocations if the previous allocation is still in use. We draw many primitive batches in one frame, which stress-tests this mechanism somewhat. If internal driver limits are hit, the resource update will start to block until the GPU catches up and releases in-use allocations. This would result in a significant reduction in framerate.

To avoid this, we upload the data for all primitive batches at once at the beginning of the frame. Each primitive batch draw then binds the relevant sub-array of the instance buffer. This way, there are no mid-frame resource updates.

Release Notes:

  • N/A

@cla-bot cla-bot bot added the cla-signed The user has signed the Contributor License Agreement label Feb 3, 2026
@reflectronic reflectronic merged commit 9ef1afd into zed-industries:main Feb 3, 2026
27 checks passed
adb-sh pushed a commit to adb-sh/zed that referenced this pull request Feb 5, 2026
Currently, each time we draw a primitive batch, we fully overwrite the
instance buffer with the contents of the new batch. Since we use a
write-only mapping to do this, the GPU driver may handle synchronization
hazards by transparently creating new allocations if the previous
allocation is still in use. We draw many primitive batches in one frame,
which stress-tests this mechanism somewhat. If internal driver limits
are hit, the resource update will start to block until the GPU catches
up and releases in-use allocations. This would result in a significant
reduction in framerate.

To avoid this, we upload the data for all primitive batches at once at
the beginning of the frame. Each primitive batch draw then binds the
relevant sub-array of the instance buffer. This way, there are no
mid-frame resource updates.

Release Notes:

- N/A
rtfeldman pushed a commit that referenced this pull request Feb 5, 2026
Currently, each time we draw a primitive batch, we fully overwrite the
instance buffer with the contents of the new batch. Since we use a
write-only mapping to do this, the GPU driver may handle synchronization
hazards by transparently creating new allocations if the previous
allocation is still in use. We draw many primitive batches in one frame,
which stress-tests this mechanism somewhat. If internal driver limits
are hit, the resource update will start to block until the GPU catches
up and releases in-use allocations. This would result in a significant
reduction in framerate.

To avoid this, we upload the data for all primitive batches at once at
the beginning of the frame. Each primitive batch draw then binds the
relevant sub-array of the instance buffer. This way, there are no
mid-frame resource updates.

Release Notes:

- N/A
naaiyy added a commit to Glass-HQ/Glass that referenced this pull request Feb 16, 2026
Key changes:
- Reduce monomorphizations in GPUI app.rs (zed-industries#48014)
- Entities no longer implement Element directly, go through AnyElement (zed-industries#48217)
- D3D11 resource upload optimization (zed-industries#48282)
- Migrate features.edit_prediction_provider to edit_predictions.provider (zed-industries#48224)
- Make mercury and sweep non-experimental (zed-industries#48227)
- CompanionView consolidation in block_map (zed-industries#48223)
- Show memory used by language servers (zed-industries#48226)
- Settings links open sub pages (zed-industries#48212)
- Tool security rules that can't be overridden (zed-industries#48209)
- Add sweep_ai privacy mode setting (zed-industries#48220)
- Configurable REPL output size limits (zed-industries#47114)
- Fix .editorconfig files in subdirectories (zed-industries#48203)
- Security updates: bytes v1.11.1, jsonwebtoken v10
- Git UI: hide "View on GitHub" for stashes (zed-industries#48271)
- Indent guide fix in tree view with collapsed folders (zed-industries#48194)
- Edit prediction fixes and improvements

Conflict resolution:
- collab/completion.rs, collab/rpc.rs: deleted (collab removed)
- vim/search.rs: deleted (vim removed)
- livekit_api/Cargo.toml: deleted (livekit removed)
- GPUI files: deleted from Glass (handled in Obsydian-HQ/gpui)
- migrations: combined both ours (m_2026_02_06) and upstream (m_2026_02_02, m_2026_02_03)
- project.rs: kept collab functions removed, restored handle_create_file_for_peer for remote dev
- lsp_store.rs: removed collab-only set_language_server_statuses_from_proto
- proto.rs: kept CreateFileForPeer, removed CreateChannel/CreateChannelResponse
- remote_servers.rs: merged import lists (kept native button imports + added Action)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cla-signed The user has signed the Contributor License Agreement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant