Commit Graph

1427 Commits

Author SHA1 Message Date
Mikko Lehtonen
459e835250 Add Ids to PassErrorScope
Also makes it pub, and the places it is used.
Tweak some error messages.
2020-11-21 23:39:05 +02:00
bors[bot]
be398d6e2a
Merge #1036
1036: Stop using Borrow<RefCount> r=scoopr a=kvark

**Connections**
Follow-up to #931

**Description**
Takes advantage of the new `trait Resource` in the state tracker, reducing the code.

**Testing**
Not tested outside of `cargo test`

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-11-21 17:50:44 +00:00
Dzmitry Malyshau
46b87e220c Stop using Borrow<RefCount> 2020-11-21 10:38:20 -05:00
Dzmitry Malyshau
dfcf840b2b Architecture diagram 2020-11-19 21:11:19 -05:00
bors[bot]
9d35aea08e
Merge #1033
1033: Missing label queries r=kvark a=scoopr

I missed few bits needed for labeling the resources in the errors.

Co-authored-by: Mikko Lehtonen <scoopr@iki.fi>
2020-11-19 22:25:04 +00:00
Mikko Lehtonen
48e64fc8c6 Add missing label query methods 2020-11-19 23:37:59 +02:00
Mikko Lehtonen
a41f7ea78f Make inner errors pub 2020-11-19 23:37:36 +02:00
bors[bot]
19b4ec58ae
Merge #931
931: Retain labels for resources r=kvark a=scoopr

This is wip, mostly a conversation starter.

I've attempted to have some labels show up in the errors, outside of only creation errors.
Steps to do that include,
1. Retain the label in the underlying struct (here, `Buffer`). It is guarded by `debug_assertions`
2. Add the label option to the error variant, and show it
3. Add label option to the `Element::Error` variant, so that invalid ids retain the label also. Didn't guard it with `debug_assertions` yet, but probably should. `buffer_error` now takes the label option.
4. Added a query for invalid id labels
5. Add `Global::buffer_label` for returning the label from the struct, or the invalid id.
6. Change the error variants to query the `buffer_label` when creating the error

with that (and little bit of fudging to get in to the error state), I can get
```
wgpu error: Validation error

Caused by:
    In CommandEncoder::copy_buffer_to_buffer
    buffer (0, 1, Metal) (label: Some("Staging buffer")) is invalid
```
instead of 
```
wgpu error: Validation error

Caused by:
    In CommandEncoder::copy_buffer_to_buffer
    buffer (0, 1, Metal) is invalid
```

Some of the hub handling etc. is a bit iffy for me, I really have no idea what I'm doing.

The point would be to massage this to the point that there would be a simple steps to follow on how to decorate all the errors with labels to whatever they refer to.

Other ideas I had, included trying to have `impl Debug for Id<BufferId>` to print out the label (from the struct, wouldn't work for invalid ids), but in that context I don't think I have access to the Global, so I'm not sure how resolve the id to anything useful. I suppose there could a whole separate singleton storage for id to label maps which could be easier to access in any context. Then the errors could just store the Id, and not have a separate label field.




Co-authored-by: Mikko Lehtonen <scoopr@iki.fi>
2020-11-18 22:47:02 +00:00
Mikko Lehtonen
4498f172cc Retain labels for resources
As a braking api change, adds also label for the error id generation,
for labeling invalid ids too.

Also adds query methods the label.
2020-11-19 00:09:21 +02:00
bors[bot]
5e1226995c
Merge #1031
1031: Update gpu-alloc and naga r=straightforward a=kvark

**Connections**
includes critical https://github.com/zakarumych/gpu-alloc/pull/24

**Description**
Updates Naga and gpu-alloc deps

**Testing**
Tested on wgpu-rs

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-11-18 14:26:07 +00:00
Dzmitry Malyshau
b48764728d Update gpu-alloc and naga 2020-11-18 09:24:43 -05:00
bors[bot]
d3cc2dc511
Merge #1025
1025: Don't install Android NDK r=msiglreith a=kvark

Follows https://github.com/gfx-rs/gfx/pull/3474

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
Co-authored-by: msiglreith <m.siglreith@gmail.com>
2020-11-15 23:35:47 +00:00
msiglreith
b09027a74a export ndk toolchain path 2020-11-15 18:34:55 -05:00
Dzmitry Malyshau
c7273b03d6
Don't install Android NDK 2020-11-14 20:07:50 -05:00
bors[bot]
af9713b249
Merge #1023
1023: Drop surfaces and adapters r=cwfitzgerald a=kvark

**Connections**
Not very connected

**Description**
Refactors our destruction paths a bit

**Testing**
tested on wgpu-rs

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-11-13 23:50:28 +00:00
bors[bot]
82021b5e7c
Merge #1024
1024: Update naga to 4d4e1cd4cb r=kvark a=kvark

**Connections**
Includes https://github.com/gfx-rs/naga/pull/273, https://github.com/gfx-rs/naga/pull/270, and others

**Description**
Better SPIR-V validation and introspection

**Testing**
Tested on Gecko (yo!)

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-11-13 23:43:33 +00:00
Dzmitry Malyshau
ac89fbab8a Drop surfaces and adapters 2020-11-13 18:39:14 -05:00
Dzmitry Malyshau
b0a98548d1 Update naga to 4d4e1cd4cb 2020-11-13 12:26:48 -05:00
bors[bot]
57901a504c
Merge #1021
1021: Normalize `Err(x)?` to `return Err(x.into())` r=kvark a=Kimundi

Just a tiny change based on some matrix discussion.

Co-authored-by: Marvin Löbel <loebel.marvin@gmail.com>
2020-11-12 23:14:14 +00:00
Marvin Löbel
3787d3bedb Change Err(x)? to return Err(x.into()) 2020-11-13 00:03:13 +01:00
bors[bot]
022f19f94c
Merge #1018
1018: Add context for errors originating from commads in a Pass r=kvark a=Kimundi

**Description**
This adds some error context information for some errors that can happen in a `{Render,Compute}Pass` to make error messages more clear.

Combined with https://github.com/gfx-rs/wgpu-rs/pull/613, errors in passes will look like this:
```
wgpu error: Validation error

Caused by:
    In a RenderPass
    In a draw command
    index 3600 extends beyond limit 38
```


Co-authored-by: Marvin Löbel <loebel.marvin@gmail.com>
2020-11-12 22:11:37 +00:00
Marvin Löbel
8723a8379a Annotate all commands of {Compute,Render}Passes with error context informations 2020-11-12 23:05:10 +01:00
bors[bot]
2e88de3157
Merge #1015
1015: Replace gfx-memory by gpu-alloc r=cwfitzgerald a=kvark

**Connections**
Fixes #1011
Blocked on:
- https://github.com/zakarumych/gpu-alloc/issues/4
- https://github.com/zakarumych/gpu-alloc/pull/14
- https://github.com/zakarumych/gpu-alloc/issues/16

**Description**
Moves us to gpu-allocator, which should be simpler and better supported than gfx-memory.

**Testing**
Untested and unfinished (to be updated)

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-11-09 17:58:16 +00:00
Dzmitry Malyshau
22efbeae70 Replace gfx-memory by gpu-alloc 2020-11-09 12:16:34 -05:00
bors[bot]
789b09c7bd
Merge #1017
1017: Rename output attachment usage r=grovesNL a=yzsolt

**Connections**
Implements #1001 

**Description**
Rename OUTPUT_ATTACHMENT texture usage to RENDER_ATTACHMENT to match the WebGPU spec

**Testing**
Ensure that `wgpu-rs` and `wgpu-native` build after the rename

**TODO**
- [ ] Update `wgpu-rs`
- [ ] Update `wgpu-native`

Co-authored-by: Zsolt Bölöny <bolony.zsolt@gmail.com>
2020-11-09 12:32:07 +00:00
Zsolt Bölöny
a493ed06d8 Rename OutputAttachment helper struct to RenderAttachment too to avoid confusion 2020-11-08 14:27:44 +01:00
Zsolt Bölöny
2151a252ad Rename TextureUsage::OUTPUT_ATTACHMENT to RENDER_ATTACHMENT 2020-11-08 14:24:39 +01:00
Dzmitry Malyshau
73d3f71caa
Enable the non-fill polygon mode feature if requested (#1016)
* Enable the non-fill polygon mode feature if requested

* Update wgpu-core/src/instance.rs

Co-authored-by: monocodus[bot] <49363530+monocodus[bot]@users.noreply.github.com>

Co-authored-by: monocodus[bot] <49363530+monocodus[bot]@users.noreply.github.com>
2020-11-06 00:32:04 -05:00
Dzmitry Malyshau
6714c4fe7e
Update players readme 2020-11-05 16:58:40 -05:00
bors[bot]
99ff41bb99
Merge #907
907: Implement OpenGL Backend For Unix Platforms r=kvark a=zicklag

**Connections**
Requires: https://github.com/gfx-rs/gfx/pull/3340 ( merged )
Should be merged first: https://github.com/gfx-rs/wgpu/pull/910
Works towards: https://github.com/gfx-rs/wgpu/issues/450

**Description**
Integrates the GFX GL backend for Unix platforms

**Testing**
Runs the basic cube and triangle examples  for wgpu-rs, but not without rendering artifacts on the cube.
<!--
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: Zicklag <zicklag@katharostech.com>
2020-11-05 02:54:37 +00:00
Zicklag
f7f1ff699a Implement OpenGL Backend For Unix Platforms 2020-11-04 20:32:33 -06:00
Zicklag
7beb7c3411 Update For Latest GFX
Using a specific Git commit for now because it is unreleased.
2020-11-02 20:25:07 -06:00
Zicklag
165d7717b4 Add Error Message When Surface Creation Fails 2020-11-02 20:24:30 -06:00
bors[bot]
7b9abf0fef
Merge #1008
1008: Add helpers to convert passes to serialized forms r=grovesNL a=kvark

**Connections**
Stuff I needed to fix in the upcoming Gecko WebGPU update.

**Description**
It allows us to use the tracing `Command` more aggressively.

**Testing**
Tested in Gecko, doesn't need testing in wgpu

Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
Co-authored-by: Dzmitry Malyshau <kvark@fastmail.com>
2020-11-02 23:15:03 +00:00
Dzmitry Malyshau
367735d085
Rename the lint to broken_intra_doc_links 2020-11-02 18:00:56 -05:00
bors[bot]
dd4a71d31d
Merge #1012
1012: Check array layer counts r=cwfitzgerald a=kvark

**Connections**
Prevents https://github.com/gfx-rs/wgpu-rs/issues/601

**Description**
Follows the spec, yo!

**Testing**
Not tested, but not terribly complicated either.

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-10-31 00:51:06 +00:00
Dzmitry Malyshau
5e1e3314cd Check array layer counts 2020-10-30 17:31:43 -04:00
Dzmitry Malyshau
6e3c7b359f Add missing license headers 2020-10-28 13:40:41 -04:00
Dzmitry Malyshau
a168886497 Add helpers to convert passes to serialized forms 2020-10-27 13:19:05 -04:00
bors[bot]
c6c50e9670
Merge #1007
1007: Improve cubemap validation r=kvark a=cwfitzgerald

**Connections**

Closes #952.

**Description**

We were missing depth-size and texture dimension validation when creating Cubemap and CubemapArray views.

I split the depth-size errors so I can give a more helpful error message in both cases.

**Testing**

Tested on the skybox example when made intensionally incorrect.

Co-authored-by: Connor Fitzgerald <connorwadefitzgerald@gmail.com>
2020-10-26 03:16:31 +00:00
Connor Fitzgerald
dcc14fe645 Improve cubemap validation 2020-10-25 17:14:14 -04:00
bors[bot]
6c519e0d92
Merge #1000
1000: Elide redundant set_pipeline calls. r=kvark a=Kimundi

**Description**
This adds an check in each `set_pipeline()` call for wether the same pipeline id has already been set previously. This should cause free performance wins for suboptimal usage of the wgpu API, while having neglible overhead otherwise.

An example scenario for where this would be useful is a game that just blindly sets all render state for each object, but has few actually different objects:

```rust
for game_obj in game_objs {
    rpass.set_pipeline(...);
    rpass.set_bind_group(...);
    rpass.set_vertex_buffer(...);
    rpass.draw(...);
}
```

**Testing**
Ideally we would have tests that check that pipeline changes have been ellided, but I'm not sure how to write them in the current codebase.

**Future work**
- We could extend this kind of redundant state change detection to most `.set_*` methods on `RenderPass`es.
- If we want to guarantee this behavior in the API, we should also document it.

Co-authored-by: Marvin Löbel <loebel.marvin@gmail.com>
2020-10-22 17:18:24 +00:00
bors[bot]
464571ac1f
Merge #998
998: Fix regression in device_create_swap_chain r=kvark a=qthree

**Description**
My app works fine with wgpu 0.6 but after upgrade to master branch of `wgpu-rs` it started to panic inside `Device::create_swap_chain`.

**Repro steps**
That happens when there are at least 3 windows opened right after app's startup. My [viewports](https://github.com/qthree/viewports) crate can reproduce this issue. Steps:
```
git clone -b wgpu-master https://github.com/qthree/viewports
cd viewports
RUST_BACKTRACE=1 cargo run --example wgpu --all-features
```
First run is OK, but if you drag two "virtual" windows out of native window and then restart app, it panics.

**Connections**
It's caused by the new behavior of `hub::Storage::remove` introduced in #925, it panics while trying to remove Element::Vacant.

**Proposed solution**
Previously `Storage::remove` returned `None` on `Element::Vacant` and this behavior was expected by `device::Global::device_create_swap_chain`. At least, [this code](8ce2530b69/wgpu-core/src/device/mod.rs (L3561)) doesn't look like it should panic implicitly.
After #925 `device::Global::device_create_swap_chain` was changed to use new `Storage::try_remove`, and it takes into account out of range access, but panics on Element::Vacant.
Since that's the only place where `Storage::try_remove` is used, i changed this function's body back to the body of old `Storage::remove`, and left new `Storage::remove` as is, because it's used in other places.

**Testing**
Since `Storage::try_remove` is used only in one place, `device::Global::device_create_swap_chain`, there shouldn't be any impact on another pieces of code. Also, function code is as same as on stable wgpu 0.6, so there shouldn't be any new bugs. Still, this fixed  regression encountered by me, and `cargo test` of `wgpu-core` is passing.
I'm not sure if I should add unit test to cover this case, to save it from regressions in future (and what meaningful test would look like).

**Alternatives**
Don't call `Storage::try_remove` if it's first swapchain creation for surface. Probably, by checking id returned by `surface_id.to_swap_chain_id(B::VARIANT)` with `Storage::contains`. But `Storage::contains` will panic on out of range id.

Co-authored-by: qthree <qthree3@gmail.com>
2020-10-22 14:54:36 +00:00
Dzmitry Malyshau
c230988caa
Add repr(C) on copy views 2020-10-21 16:39:27 -04:00
Marvin Löbel
752c1aad33 Elide redundant set_pipeline calls.
Add a small abstraction over state changes

Deduplicate redundant pipeline state checking
2020-10-21 19:25:21 +02:00
qthree
c3a5144ae0 Fix regression in device_create_swap_chain
It was caused by new behavior of Storage::remove.
2020-10-20 13:33:03 +07:00
Dzmitry Malyshau
8ce2530b69 Save an allocation of raw bindings in create_bind_group 2020-10-15 16:37:10 -04:00
bors[bot]
7ecd9b477f
Merge #990
990: Simplify descriptor writes r=cwfitzgerald a=kvark

**Connections**
Reverts #980 and #970
Takes advantage of https://github.com/gfx-rs/gfx/pull/3410

**Description**
Weighting all the pros and cons, I figured it's easier to adjust the Vulkan backend a little than treating it as a lowest common denominator for this issue.

**Testing**
Tested on wgpu-rs examples (on Vulkan).

Co-authored-by: Dzmitry Malyshau <kvark@fastmail.com>
2020-10-15 20:19:20 +00:00
Dzmitry Malyshau
a4e8d58144 Update gfx-backend-vulkan to 0.6.4 2020-10-15 16:03:30 -04:00
Dzmitry Malyshau
6d40a81833 Revert "Fix coalescing of descriptor sets"
This reverts commit 56df63b122.
2020-10-15 15:53:26 -04:00