Commit Graph

1526 Commits

Author SHA1 Message Date
Dzmitry Malyshau
922f2c0977 Check swapchain frame to still be in use 2021-01-04 17:03:16 -05:00
bors[bot]
35a2c8c474 Merge #1125
1125: Fix UB in populating dynamic offsets r=kvark a=kvark

**Connections**
Related to the traces in #1123

**Description**
The dynamic offsets arrays appear to be empty in the traces, which makes no sense. We are populating them unconditionally, and I double-checked on the `shadow` example that the traces we record contain the offsets. So my only guess is that the reported traces are taken from a release build, and our code that does `slice::from_raw_parts()` on the offsets is UB because the pointer can be garbage (if length is 0). This is what the PR fixes.

**Testing**
Untested

Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
2021-01-04 19:49:21 +00:00
Dzmitry Malyshau
f328995950 Fix UB in populating dynamic offsets 2021-01-04 14:46:04 -05:00
bors[bot]
29cb9e687d Merge #1124
1124: Fix range tracker merging r=kvark a=kvark

**Connections**
Fixes #1123 

**Description**
The merge routine was not properly updating the end pointer in some branches.

**Testing**
A unit test is added with the data extracted from the user case.

Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
2021-01-04 18:42:02 +00:00
Dzmitry Malyshau
a7e573d612 Fix range tracker merging 2021-01-04 13:41:25 -05:00
bors[bot]
b82482f31c Merge #1121
1121: Implement render bundle freeing r=straightforward a=kvark

**Connections**
Fixes #1120

**Description**
Since render bundles were added the relevant bits of logic to free them were just missing.

**Testing**
Untested

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2021-01-04 14:32:45 +00:00
Dzmitry Malyshau
5953098461 Implement render bundle freeing 2021-01-04 09:30:10 -05:00
bors[bot]
d09b149f6d Merge #1119
1119: Lock device tracker after the resources r=kvark a=kvark

**Connections**
Fixes  #1118

**Description**
Added a comment above `struct Device` explaining the problem and constraints.
We may have a few other cases that need to be handled gracefully by the type system.
For this fix we at least ensure that the device tracker is always locked temporarily.

**Testing**
Untested.

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2021-01-04 14:10:11 +00:00
Dzmitry Malyshau
2b02b7c8e4 Lock device tracker after the resources 2021-01-03 11:29:18 -05:00
bors[bot]
36d274bc5a Merge #1115
1115: Request buffer FAST_DEVICE_ACCESS only with some non MAP or COPY usage r=kvark a=fintelia

**Connections**
Fixes #1113 

**Description**
On Linux AMD (and likely elsewhere) buffers with FAST_DEVICE_ACCESS are very slow to access when mapped. This makes sure that upload/download buffers don't request it unless those buffers are leveraging MAPPABLE_PRIMARY_BUFFERS for some non-map/copy usage.

**Testing**
I reran the failing reproduction case in the linked issue.


Co-authored-by: Jonathan Behrens <fintelia@gmail.com>
2021-01-03 03:32:08 +00:00
bors[bot]
b67c2b0299 Merge #1117
1117: Free associated staging buffers r=cwfitzgerald a=kvark

**Connections**
Reported on the Matrix. Having a loop that creates mapped buffers and drops them results in OOM.

**Description**
We are now checking for the map state when destroying buffers.

**Testing**
Ran through an ad-hoc example.

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2021-01-02 23:55:05 +00:00
Dzmitry Malyshau
d095dd39b7 Free associated staging buffers 2021-01-02 18:52:07 -05:00
Jonathan Behrens
0e84c29691 Limit when buffer FAST_DEVICE_ACCESS is requested 2021-01-02 14:18:14 -05:00
bors[bot]
e9232127f0 Merge #1114
1114: Fixed error message for BindingTypeMaxCountError r=cwfitzgerald a=Wumpf

Previously, `BindingTypeMaxCountError` would incorrectly report the binding count as the violated limit. Now it reports both the limit and the count that violated it.

Example error message before:
```
wgpu error: Validation Error

Caused by:
    In Device::create_bind_group_layout
      note: label = `BindGroupLayout write scalar`
    too many bindings of type StorageTextures in stage COMPUTE, limit is 5
```


Example error message after:
```
wgpu error: Validation Error

Caused by:
    In Device::create_bind_group_layout
      note: label = `BindGroupLayout write scalar`
    too many bindings of type StorageTextures in stage COMPUTE, limit is 4, count was 5
```

Co-authored-by: Andreas Reich <r_andreas2@web.de>
2021-01-02 15:08:09 +00:00
Andreas Reich
9770959577 Fixed error message for BindingTypeMaxCountError
Previously, it would incorrectly report the binding count as the violated limit. Now it reports both the limit and the count that violated it.
2021-01-02 15:13:52 +01:00
bors[bot]
a90d2fcf8a Merge #1101
1101: Bump gfx-hal and gpu-alloc r=kvark a=cwfitzgerald

**Connections**

Absorbs https://github.com/zakarumych/gpu-alloc/pull/31 and https://github.com/gfx-rs/gfx/pull/3548#issuecomment-749158016

**Description**

This fixes the last of the DX11 issues listed in #1059.

**Testing**

Various examples ran.


Co-authored-by: Connor Fitzgerald <connorwadefitzgerald@gmail.com>
2020-12-27 06:11:06 +00:00
Connor Fitzgerald
79973aaaff Bump gfx-hal and gpu-alloc 2020-12-27 01:10:24 -05:00
bors[bot]
aded405479 Merge #1106
1106: Encode render passes while command buffer is only read-locked r=cwfitzgerald a=kvark

**Connections**
Could fix #1104 to some extent

**Description**
The heaviest part of the render pass encoding doesn't need a write lock. Only in the end we need it.

**Testing**
Untested.

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-12-23 16:21:03 +00:00
Dzmitry Malyshau
ab10d36ac0 Rename get_encoder to get_encoder_mut 2020-12-23 11:20:08 -05:00
bors[bot]
4add83a8c5 Merge #1107
1107: Use `repr(transparent)` for shader flags r=cwfitzgerald a=grovesNL

**Connections**
None

**Description**
This allows cbindgen to generate bindings for shader flags in wgpu-native.

**Testing**
After `WGPUShaderFlags` is exposed in wgpu-native, bindings for `WGPUShaderFlags` will be generated in wgpu.h

Co-authored-by: Joshua Groves <josh@joshgroves.com>
2020-12-23 11:33:39 +00:00
Joshua Groves
45b5ddcb83 Use repr(transparent) for shader flags
This allows cbindgen to generate bindings for shader flags in
wgpu-native
2020-12-23 06:43:15 -03:30
Dzmitry Malyshau
a7587b41e6 Move the render pass setup logic into a separate method/struct 2020-12-22 22:30:27 -05:00
Dzmitry Malyshau
35b163ebc8 Encode render passes while command buffer is only read-locked 2020-12-22 13:48:18 -05:00
bors[bot]
2287ae3f8a Merge #1103
1103: Fix Assorted Low-Hanging Validation and Error Message Issues r=kvark a=cwfitzgerald

**Connections**

Closes #1085
Closes #393
Closes #1053

**Description**

These commits are independent and should be reviewed individually. Combined into a single PR to reduce noise.

Overview of what was done:
- Add validation for empty texture and buffer usage flags. (#393)
- Add allowed texture usage flags to `format.describe()` (#1085)
  Validate new textures follow the allowed usage flags.
- Properly validates vertex and buffers are bound. (#1053)
  Improves error messages when no vertex buffer is bound. (Before it said the limit was 0, now it says something is unbound)
- Improve the vertex buffer overrun messages by keeping track of which slot has the smallest index.

**Testing**

Tested on examples by artificially creating the situation I am trying to validate, as well as running clean examples to make sure they pass validation.

Co-authored-by: Connor Fitzgerald <connorwadefitzgerald@gmail.com>
2020-12-22 04:29:38 +00:00
Connor Fitzgerald
1da153f3bd Improve vertex state error messages 2020-12-21 23:13:34 -05:00
Connor Fitzgerald
94579d8125 Properly validate vertex buffer state 2020-12-21 23:10:53 -05:00
Connor Fitzgerald
43814d258f Add format usage descriptions and validate on it. 2020-12-21 23:08:31 -05:00
bors[bot]
7e3965bb5a Merge #1100
1100: Validate swapchain extent as non-zero r=kvark a=cwfitzgerald

**Connections**

Fixes #1026. 

**Description**

Zero area swapchains are UB under vulkan, and should be verboten.

**Testing**

Not tested


Co-authored-by: Connor Fitzgerald <connorwadefitzgerald@gmail.com>
2020-12-22 03:31:36 +00:00
Connor Fitzgerald
6c6ce2f28c Validate on empty usages 2020-12-21 17:27:17 -05:00
Connor Fitzgerald
073c0b2f3e Validate swapchain extent as non-zero 2020-12-21 14:56:06 -05:00
bors[bot]
b3422257ef Merge #1099
1099: Pass DEPTH_CLAMPING feature request to gfx-hal r=cwfitzgerald a=Imberflur

**Connections**
Fixes #1087 

**Description**
The request for the depth clamping feature was not being passed down to `gfx-hal`. This led to a warning from the vulkan backend when attempting to use this feature.

**Testing**
ran `wgpu-rs` shadow example and the warning no longer appears
<!--
Non-trivial functional changes would need to be tested through:
  - [wgpu-rs](https://github.com/gfx-rs/wgpu-rs) - test the examples.
  - [wgpu-native](https://github.com/gfx-rs/wgpu-native/) - check the generated C header for sanity.

Ideally, a PR needs to link to the draft PRs in these projects with relevant modifications.
See https://github.com/gfx-rs/wgpu/pull/666 for an example.
If you can add a unit/integration test here in `wgpu`, that would be best.
-->


Co-authored-by: Imbris <imbrisf@gmail.com>
2020-12-19 22:41:21 +00:00
Imbris
e775987233 Pass DEPTH_CLAMPING feature request to gfx-hal 2020-12-19 16:14:51 -05:00
bors[bot]
4ebe1f50b0 Merge #1098
1098: Move AdapterInfo into wgt r=grovesNL a=kvark

**Connections**
Fixes #1095

**Description**
This is just nicer code, and we'll be able to make `get_info` available on Web targets.

**Testing**
Untested


Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-12-18 21:52:38 +00:00
Dzmitry Malyshau
b95a66da5e Move AdapterInfo into wgt 2020-12-18 16:43:19 -05:00
bors[bot]
60086bb1d6 Merge #1096
1096: Fix build for wasm32 target r=kvark a=VincentFTS

**Connections**
#115 

**Description**
Fix Wgpu build for Wasm target

**Testing**
It’s just a first step toward wasm support in Wgpu-rs, a PR in Wgpu-rs will come later.


Co-authored-by: Vincent Jousse <contact@ftsoftware.fr>
2020-12-18 21:12:00 +00:00
Vincent Jousse
0899bb7207 Fix build for wasm32 target 2020-12-18 22:09:20 +01:00
bors[bot]
e09cf3dbf4 Merge #1097
1097: Fix bad copy/paste in #907 r=grovesNL a=VincentFTS

**Connections**
#907

**Description**
Fix a copy/paste from dx11 code.



Co-authored-by: Vincent Jousse <contact@ftsoftware.fr>
2020-12-18 20:44:04 +00:00
Vincent Jousse
ab64aa5b92 Fix bad copy/paste in #907 2020-12-18 21:37:17 +01:00
bors[bot]
89e585af61 Merge #1093
1093: Update naga and gfx, move the shader validation into a shader descriptor bit r=cwfitzgerald a=kvark

**Connections**
Includes https://github.com/gfx-rs/gfx/pull/3533 and a bunch of Naga things.

**Description**
Updates Naga with the new WGSL syntax, lots of fixes.
Large update of the GL backend.

**Testing**
Tested on some wgpu-rs examples.

Co-authored-by: Dzmitry Malyshau <kvark@fastmail.com>
2020-12-17 16:34:28 +00:00
Dzmitry Malyshau
f07cc8156b Update naga and gfx, move the shader validation into a shader descriptor bit 2020-12-17 11:33:47 -05:00
bors[bot]
066a5978d5 Merge #1092
1092: Optimize submit() for no command buffers r=kvark a=kvark

**Connections**
Just a few bits I found when tinkering with API traces.

**Description**
No need to lock the world if there are no command buffers.

**Testing**
tested on API traces

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-12-16 20:05:27 +00:00
Dzmitry Malyshau
b84301110c Optimize submit() for no command buffers 2020-12-16 15:02:09 -05:00
bors[bot]
42a8dc5b34 Merge #1090
1090: Clean up render pass labels r=kvark a=kvark

**Connections**
Follow-up to #1088 to fix https://github.com/gfx-rs/wgpu/issues/1089#issuecomment-745596393

**Description**
Render passes are recorded into their own command buffers under the hood, and I forgot to properly reset the labels on them.

**Testing**
Untested

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-12-15 22:30:22 +00:00
Dzmitry Malyshau
cb67ef6542 Clean up render pass labels 2020-12-15 17:28:24 -05:00
bors[bot]
03d2c57dc5 Merge #1088
1088: Fix and improve object labels and command markers r=cwfitzgerald a=kvark

**Connections**
Fixes a part of #1089 

**Description**
PR contains a bunch of small but important things:
  - reset the command buffer label after submission
  - add labels to compute and pass descriptors
  - actually push/pop markers for the scope of render bundle, compute passes
  - set the label to render pass command buffers
  - set labels on pipelines

**Testing**
Not tested much

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-12-15 18:10:59 +00:00
Dzmitry Malyshau
394135f725 Fix and improve object labels and command markers 2020-12-15 11:28:11 -05:00
bors[bot]
01733a2f45 Merge #1086
1086: Add SHADER_READ usage bit to non-readonly buffers r=kvark a=infinitesnow

Change-Id: I99d189e7ef295a58c2179635f95656eb9a2f5fe6

**Connections**
Fixes #949

**Description**
 Non-readonly buffers are created with the STORAGE_WRITE usage flag, but that implies SHADER_READ too.

Co-authored-by: Emanuele Dalla Longa <3xplosive.g@gmail.com>
2020-12-10 16:22:43 +00:00
Emanuele Dalla Longa
b3f18ff3c5 Add SHADER_READ usage bit to non-readonly buffers
Change-Id: I99d189e7ef295a58c2179635f95656eb9a2f5fe6
2020-12-10 17:20:29 +01:00
bors[bot]
69196d85a3 Merge #1077
1077: Remove extern "C" from set_index_buffer r=kvark a=DevOrc

**Connections**
Fixes an issue that is blocking gfx-rs/wgpu-native#61

**Description**
Moves the ffi definition of wgpu_render_bundle_set_index_buffer / wgpu_render_pass_set_index_buffer to wgpu-native. This is needed because wgpu-native has its own version of IndexFormat that is different than the wgpu_types version. 

**Testing**
My projects with wgpu-native work


Co-authored-by: Noah Charlton <ncharlton002@gmail.com>
2020-12-08 15:45:00 +00:00
Noah Charlton
b71c47a064 Remove extern "C" from set_index_buffer 2020-12-07 17:03:54 -05:00