Commit Graph

1555 Commits

Author SHA1 Message Date
dasetwas
c01e2d10ce Remove comment introduced in https://github.com/gfx-rs/wgpu/pull/1144 2021-01-13 23:28:44 +01:00
bors[bot]
c788b1cef6 Merge #1132
1132: Include pipeline id in some pass error scopes r=kvark a=scoopr



Co-authored-by: Mikko Lehtonen <scoopr@iki.fi>
2021-01-12 21:16:30 +00:00
Mikko Lehtonen
6c56613045 Merge PassErrorScope::Draw* and Dispatch* variants 2021-01-12 22:23:17 +02:00
Mikko Lehtonen
0d60bd80c5 Include pipeline id in some pass error scopes 2021-01-12 17:58:44 +02:00
bors[bot]
ec9c8a2e84 Merge #1145
1145: Support trailing render passes after the swapchain rendering r=kvark a=kvark

**Connections**
Discussed on the matrix.

**Description**
Fixes a case where we have any other render pass in a command encoder that draws to the swapchain (after the pass that draws to the swapchain).

**Testing**
Tested on a modified hello-triangle example.

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2021-01-12 02:56:46 +00:00
Dzmitry Malyshau
389a848dea Support trailing render passes after the swapchain rendering 2021-01-11 21:40:41 -05:00
bors[bot]
09ba19b265 Merge #1144
1144: Fix and simplify attachment dimension mismatch check r=kvark a=DasEtwas

This also improves error messages with detailed dimension and attachment type name info which developers can hopefully recognize.

**Connections**
None

**Description**
Before this commit, depth/stencil attachments are not considered when evaluating the renderpasses' dimension, which will result in a "NoAttachment" error with a confusing display message.

**Testing**
Tested by running an application making use of color-only and depth/stencil-only attachment renderpasses.

Tested by running boids, hello-triangle and shadow examples.


Co-authored-by: DasEtwas <18222134+DasEtwas@users.noreply.github.com>
2021-01-11 23:05:10 +00:00
DasEtwas
93f68add27 Decrease error variant code verbosity, apply reviews 2021-01-11 23:46:26 +01:00
DasEtwas
151d521ad9 Fix and simplify attachment dimension mismatch check
This also improves error messages with detailed dimension and attachment type name info which should help developers can hopefully recognize.
2021-01-11 20:13:14 +01:00
bors[bot]
ae3e5057af Merge #1142
1142: Move get_swap_chain_preferred_format from device to adapter and check formats r=kvark a=niklaskorz

**Connections**

https://github.com/gfx-rs/wgpu-rs/issues/123#issuecomment-757831458

**Description**

Not all devices actually support `Bgra8UnormSrgb`. If this is the case, a similar format like `Rgba8UnormSrgb` can be used.

**Testing**

e5ebfa70a4/learn-wgpu/src/lib.rs (L137)

- Output on MacBook Pro 13" Intel 2020 macOS Metal: `Format: Bgra8UnormSrgb`
- Output on OnePlus 7 Pro Android Vulkan: `Format: Rgba8UnormSrgb`


Co-authored-by: Niklas Korz <niklas@niklaskorz.de>
2021-01-11 19:03:40 +00:00
Niklas Korz
ac98c0bdfa Move get_swap_chain_preferred_format from device to adapter and check formats
Squashed commit of the following:

commit 16e9c89dbccda3e37d05f7548dc8b9ddfb1d8613
Author: Niklas Korz <niklas@niklaskorz.de>
Date:   Mon Jan 11 19:15:43 2021 +0100

    format

commit 8c69a70ec22427b6a030915e06654bb0fc9b3c69
Author: Niklas Korz <niklas@niklaskorz.de>
Date:   Mon Jan 11 19:12:24 2021 +0100

    Implement Global::adapter_get_swap_chain_preferred_format

commit 63efae1cff508d060eaa6ccafe80c02af6af21f4
Author: Niklas Korz <niklas@niklaskorz.de>
Date:   Mon Jan 11 17:25:42 2021 +0100

    Move get_swap_chain_preferred_format to adapter

commit 1e72a876994820aec9b18f9dac7f1a9ae82d7cee
Author: Niklas Korz <niklas@niklaskorz.de>
Date:   Mon Jan 11 15:49:10 2021 +0100

    Add fallback to device_get_swap_chain_preferred_format
2021-01-11 19:50:32 +01:00
bors[bot]
5a29e010e2 Merge #1140
1140: Enable storage read/write format feature r=kvark a=Wumpf

**Connections**
#1112

**Description**
Use `wgt::TextureFormatFeatureFlags::STORAGE_READ_WRITE` in `get_texture_format_features`.
This has been waiting for a gfx update which was enabled by @ElArtista 's workaround in #1136 \o/

Co-authored-by: Andreas Reich <r_andreas2@web.de>
2021-01-10 22:26:58 +00:00
Andreas Reich
78466fbb31 Enable storage read/write format feature 2021-01-10 22:12:09 +01:00
bors[bot]
8920e8b2ba Merge #1135
1135: Make all textures support usage COPY_SRC and COPY_DST r=kvark a=fintelia

**Connections**
N/A

**Description**
In WebGPU, all textures should be allowed to have usages COPY_SRC and COPY_DST. However, right now when Features::TEXTURE_ADAPTER_SPECIFIC_FORMAT_FEATURES is enabled any features that the backend says can't be blitted to/from will not gain these capabilities. In particular, compressed textures may not support blitting while still allowing access via copies to/from buffers.

You can also see the defaults used when TEXTURE_ADAPTER_SPECIFIC_FORMAT_FEATURES is not requested:
8c00cbcc8e/wgpu-types/src/lib.rs (L1224-L1342)

**Testing**
I ran a [patched version of the wgpu-rs cube example](https://github.com/fintelia/wgpu-rs/tree/cube-bc4/examples/cube).

Co-authored-by: Jonathan Behrens <fintelia@gmail.com>
2021-01-10 16:09:13 +00:00
Jonathan Behrens
1e7fa480a1 Make all textures support their guaranteed usages 2021-01-10 10:59:42 -05:00
bors[bot]
5b9cfeb941 Merge #1136
1136: Changed Arc<B::Memory> to Arc<Mutex<B::Memory>> in GpuAllocator r=kvark a=ElArtista

Work around for blocker https://github.com/zakarumych/gpu-alloc/issues/33, makes wgpu compatible with latest gfx

Co-authored-by: TheArtist <agorglouk@gmail.com>
2021-01-09 23:17:03 +00:00
TheArtist
ce908c5f57 Changed Arc<B::Memory> to Arc<Mutex<B::Memory>> in GpuAllocator 2021-01-09 19:53:13 +02:00
bors[bot]
8c00cbcc8e Merge #1112
1112: Expose adapter specific formats features via Extension, support for storage read+write r=kvark a=Wumpf

**Connections**
Draft until https://github.com/gfx-rs/gfx/pull/3559 landed (then update and comment two lines in)
New & improved replacement for #1109

PR for wgpu-rs to be opened once there's some confidence that this is that it should look like. [Preview](https://github.com/gfx-rs/wgpu-rs/compare/master...Wumpf:texture-format-feature-query?expand=1)

**Description**
Adapter exposes now per texture format specific features. Feature struct defined as allowed usages + flags. Flags describe only storage texture usage so far.

Query not used for validation unless `TEXTURE_ADAPTER_SPECIFIC_FORMAT_FEATURES` feature is enabled on a device. Otherwise uses hardcoded feature set guaranteed by webgpu.
Storage read/write binding can then be used as a consequence (storage atomic has no effect yet).

**Testing**
Manual testing with my fluid sim project through wgpu-rs which covers storage r/w for a few different formats and storage in general for formats that don't support this usage by default at all.
Ran tests and a couple of samples to see if anything broke with the feature disabled.

Co-authored-by: Andreas Reich <r_andreas2@web.de>
2021-01-06 18:56:30 +00:00
Andreas Reich
30c96bfead Added note on why hal update needed for STORAGE_READ_WRITE is blocked atm 2021-01-06 17:59:53 +01:00
bors[bot]
4c81941989 Merge #1134
1134: Never prefer CPU devices over GPUs r=kvark a=myfreeweb

**Connections**
Rebase of #969 onto master

**Description**
See #969

Co-authored-by: Greg V <greg@unrelenting.technology>
2021-01-06 16:32:54 +00:00
Greg V
072b94c9fd Never prefer CPU devices over GPUs 2021-01-06 19:19:39 +03:00
Andreas Reich
e29d17a13f wgpu format features are again part of TextureFormatInfo
+ some cleanup/fix indentations
2021-01-05 23:54:50 +01:00
bors[bot]
c691570c60 Merge #1127
1127: Fix API traced dynamic offsets and markers r=critical a=kvark

**Connections**
This was a regression from #1106, discovered while investigating #1123

**Description**
When running a pass, it was mutably used for "convenience". Once we moved the tracing of that pass from the beginning of the function to the end, the "convenience" eliminated our dynamic offsets and markers.
The solution is to stop mutating the passes inside our big functions.

**Testing**
Re-traced Terra

Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
2021-01-04 22:58:50 +00:00
Dzmitry Malyshau
d70148725b Fix API traced dynamic offsets and object labels 2021-01-04 17:54:56 -05:00
bors[bot]
66c987b226 Merge #1126
1126: Check swapchain frame to still be in use r=harmless a=kvark

**Connections**
Fixes #1123

**Description**
What happened there is - the same command buffer was used to record work into multiple swapchain frames.
The ID management of those is a bit special, so the error wasn't very descriptive, internal logic caught inconsistency.
Now there is a proper error, and the old error is better.
Note that ideally we'd want "present" to work like "destroy" on textures, but essentially the users would have to fix it anyway. It's not going to make their life easier (in fact - only harder), so we can defer this to a follow-up.

**Testing**
Tested on wgpu-rs examples as well as on Terra.

Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
2021-01-04 22:12:19 +00:00
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
Andreas Reich
757d12aca3 map depth/stencil feature to RENDER_ATTACHMENT 2020-12-30 12:23:13 +01:00
Andreas Reich
c17b2dc6a0 Expose adapter_get_texture_format_features 2020-12-30 12:00:00 +01:00
Andreas Reich
4207e57c02 validation against adapter specific format features
TextureFormatFeatures is now a struct of two u32 flags. Query happens only at texture creation time
2020-12-30 10:38:55 +01:00
Andreas Reich
0ccad9a466 wip adapter specific format features & rw storage 2020-12-29 17:14:22 +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