Commit Graph

9013 Commits

Author SHA1 Message Date
Kristoffer Søholm
8618a8a207 [ir] Make the interface visitor traverse local variable initializers
Otherwise the backends will panic on e.g. `vec4 local = Global;` if the global
isn't used anywere else in the function.
2020-11-02 19:34:01 -05:00
Kristoffer Søholm
a89191c234 [glsl-out] Handle initializers for locals
This pretty trivial change unfortunately required a loop to mutably borrow both
builder and manager at the same time, so I had to separate them. Perhaps a
cleaner solution would be to use an object with internal state instead of free
functions.
2020-11-02 18:15:06 -05: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
Pelle Johnsen
0101ea7319 [glsl-in] Handle assign ops: +=, *=, etc 2020-11-02 10:06:01 -05:00
Pelle Johnsen
602367c062 [glsl-in] Add initial texture handling 2020-11-01 14:52:11 -05:00
Matúš Talčík
173bb0de42 spv-in: more loop fixes 2020-10-31 10:02:47 -04:00
Dzmitry Malyshau
0893d912be [msl] fix floating point modulo, return value from compute entry point 2020-10-30 23:08:20 -04:00
Dzmitry Malyshau
f811b69aa8 [msl] avoid bad identifiers 2020-10-30 23:08:20 -04:00
Kristoffer Søholm
4a10aab5f6 [glsl-in] Add iteration statements
while, do-while and for loops
2020-10-30 21:29:53 -04:00
Kristoffer Søholm
3b8b7e28dd [glsl-in] Add selection statements
i.e. if-else and switch-case
2020-10-30 21:29:53 -04:00
Dzmitry Malyshau
80bdd23fd4 Add scalar_kind() accessor to IR Type (#251) 2020-10-30 21:25:55 -04:00
Matus Talcik
871139431a spv-in: fix while loop traverse (#253) 2020-10-30 20:58:29 -04: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
João Capucho
d45d11e4c5 msl-out: Use io::Write instead of fmt::Write (#250)
* msl-out: Use io::Write instead of fmt::Write

* msl-out: merge std use
2020-10-30 16:51:50 -04:00
Dzmitry Malyshau
529225ce4c Option to dump spirv flow graphs (#249) 2020-10-30 16:44:59 -04:00
Matus Talcik
4b43e282fc spv-in: fix flowgraph (#247)
Header blocks were incorrectly overwritten.
format
2020-10-29 10:43:12 -04:00
Dzmitry Malyshau
6e3c7b359f Add missing license headers 2020-10-28 13:40:41 -04:00
Dzmitry Malyshau
587dc01a2c [msl] refactor the options, add override stages 2020-10-28 00:30:22 -04:00
Dzmitry Malyshau
a168886497 Add helpers to convert passes to serialized forms 2020-10-27 13:19:05 -04:00
Dzmitry Malyshau
ce49afa391 Clean up the storage classes (#245) 2020-10-27 09:10:55 -04:00
Dzmitry Malyshau
c1830901c7 Simplify bitshift IR (#244) 2020-10-27 09:05:14 -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]
bcaae6a962 [rs] Merge #598
598: Clarify docs for Queue::write methods r=kvark a=Kimundi



Co-authored-by: Marvin Löbel <loebel.marvin@gmail.com>
2020-10-22 16:17:26 +00:00
Marvin Löbel
9073d18c70 [rs] Clarify docs for Queue::write methods 2020-10-22 17:40:23 +02: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
Dzmitry Malyshau
621af3cbcb Bump thiserror to 1.0.21 (#241) 2020-10-20 14:44:56 -04: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
João Capucho
a718992acb Added new external functions to the glsl backend to make it on par with the typifier (#240) 2020-10-19 09:40:30 -04: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
Dzmitry Malyshau
8a364d3c69 Revert "Group binding writes by wgt::BindingType"
This reverts commit 98c3de7884.
2020-10-15 15:52:58 -04:00
Pelle Johnsen
78c9e45182 [glsl-in] Add initial pre-processor (#238)
* [glsl-in] Add initial pre-processor

* [glsl-in] Tweak preprocessor after review

- Add IfState struct
- Use FastHashMap to pre-defines
- Use ok-or() for some errors

* [glsl-in] Remove Option in defines arg
2020-10-15 13:38:02 -04:00
bors[bot]
3c801eeafa Merge #987
987: Align stencil reference flags between pipeline creation and setting r=cwfitzgerald a=kvark

Sibling of #986 for master

Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
2020-10-14 21:05:56 +00:00
Dzmitry Malyshau
150ee25c01 Align stencil reference flags between pipeline creation and setting 2020-10-14 16:54:15 -04:00
bors[bot]
3be2c452c4 Merge #982
982: Fix debug markers in render passes (#981) r=kvark a=kazimuth

Hey, that was easy. Didn't change anything in the debug groups markers / command pass markers, since afaict they work correctly.

I didn't add a test here because I'm not sure how to use the `player` testing apparatus, but I figure since I'm just adding a line of code that's already there for compute passes ([here](https://github.com/gfx-rs/wgpu/blob/master/wgpu-core/src/command/compute.rs#L452)) it should be alright. Let me know if there's anything else I should add.

Co-authored-by: James Gilles <jameshgilles@gmail.com>
2020-10-13 22:45:14 +00:00
bors[bot]
0f16fb096f Merge #984
984: Fix locking of device lifetime tracker on resource drop r=kvark a=kvark

**Connections**
Fixes the player hang in #983

**Description**
It turns out the current type-level protection from locking device's lifetime tracker is not working properly. TODO is left.

**Testing**
Tested on the trace from #983

Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
2020-10-13 22:38:58 +00:00
Dzmitry Malyshau
ecbf81f4c9 Fix locking of device lifetime tracker on resource drop 2020-10-13 18:37:20 -04:00
James Gilles
05c58e805b Fix garbled debug markers in render passes 2020-10-13 17:34:25 -04:00
Pelle Johnsen
6fb195cdc8 [clippy] Fix clippy issues after upgrading to 1.47 (#237)
* [clippy] disable match_like_matches_macro for now

* [wgsl-in] Return error instead of panic

* [typifier] Convert panics to return error

Still one panic in clone impl for Resolution,
disabled clippy for that one

* [spv-in] REturn error instead of panic'ing

* [spv-out] Return error instead of panic'ing

* [typifier] Use IncompatibleOperand(s) error

Instead of just Other

* [typifier] Use Expression for op in Error

For IncompatibleOperands

* [typifier] revert last commit
2020-10-13 17:14:40 -04:00
bors[bot]
1a556facab [rs] Merge #596
596: Update wgpu with another bind group fix, updated power preference r=kvark a=kvark

Includes https://github.com/gfx-rs/wgpu/pull/973 and https://github.com/gfx-rs/wgpu/pull/980

Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
2020-10-13 20:58:27 +00:00
Dzmitry Malyshau
c115aed4cc [rs] Update wgpu with another bind group fix, updated power preference 2020-10-13 16:57:52 -04:00
bors[bot]
7ac706f0a9 Merge #980
980: Group binding writes by wgt::BindingType r=cwfitzgerald a=kvark

**Connections**
Follows up https://github.com/gfx-rs/wgpu/pull/970
Fixes #979

**Description**
The problem was that Vulkan restriction applies to its own descriptor types, as specified in the layout. I originally interpret this as types specified in the descriptor set. So we erroneously considered `StorageTexture` and `SampledTexture` to be in the same descriptor write.

This PR makes it use the `wgt::BindingType` instead. It's a bit richer than Vulkan side, but still correct. We are just more conservative than we have to be.

I think gfx-hal API could be better here. Filed https://github.com/gfx-rs/gfx/issues/3408 to look more.

**Testing**
Tested on #979 test case (thanks!)

Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
2020-10-13 20:18:37 +00:00