Commit Graph

895 Commits

Author SHA1 Message Date
bors[bot]
881222a947
Merge #451
451: Make BindGroupLayoutBinding Serializable r=kvark a=imiklos

cc @kvark @zakorgy

Co-authored-by: Istvan Miklos <istvan.miklos@h-lab.eu>
2020-01-14 20:04:21 +00:00
bors[bot]
a72574ae0f
Merge #440
440: Stand-alone passes r=me,grovesNL a=kvark

Fixes #438 

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-01-14 15:20:16 +00:00
Istvan Miklos
0fdf77feb5 Make BindGroupLayoutBinding Serializable 2020-01-14 12:43:58 +01:00
Dzmitry Malyshau
a51019795e Switch to a custom fork of peek-poke 2020-01-13 16:52:59 -05:00
Dzmitry Malyshau
92441c38a2 Fix missing transitions before the render pass 2020-01-13 16:52:58 -05:00
Dzmitry Malyshau
f798f7c631 Add missing render pass methods 2020-01-13 16:52:58 -05:00
Dzmitry Malyshau
e0574ee899 Remove the old render and compute passes 2020-01-13 16:52:58 -05:00
Dzmitry Malyshau
40ac14e92c Switch the examples to use the new raw passes 2020-01-13 16:52:58 -05:00
Dzmitry Malyshau
941fcca08d Raw render pass encoding 2020-01-13 16:52:58 -05:00
Dzmitry Malyshau
c01a7c6abe Use peek-poke for compute pass encoding 2020-01-13 16:52:58 -05:00
Dzmitry Malyshau
20cd803d67 Standalone render passes 2020-01-13 16:52:58 -05:00
Dzmitry Malyshau
7808a4d4cd Stand-alone compute passes 2020-01-13 16:52:58 -05:00
bors[bot]
c0fa61a064
Merge #449
449: Fix missing memory release r=kvark a=zakorgy

This fixes the issue where the underlying memory of buffers and textures not released when calling `Global::delete`.
cc @kvark

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/gfx-rs/wgpu/449)
<!-- Reviewable:end -->


Co-authored-by: Zakor Gyula <gyula.zakor@h-lab.eu>
2020-01-13 15:15:44 +00:00
Zakor Gyula
2fbda5a3c1 Fix missing memory release 2020-01-13 15:44:15 +01:00
Zakor Gyula
94fe1436f1 Fix missing memory allocator disposal 2020-01-13 15:44:15 +01:00
bors[bot]
9777bbba36
Merge #446
446: Prefer discrete GPU for PowerPreference::Default r=kvark a=aloucks



Co-authored-by: Aaron Loucks <aloucks@cofront.net>
2020-01-12 23:07:45 +00:00
Aaron Loucks
5ca57374f6 Check power/battery status when selecting adaptors
PowerPreference::Default will now prefer discrete GPUs
when on AC power and will prefer integrated GPUs while
on battery power (i.e. the battery is discharging).
2020-01-12 17:26:54 -05:00
Aaron Loucks
4b46e885fd Prefer discrete GPU for PowerPreference::Default 2020-01-11 03:07:45 -05:00
bors[bot]
3a11fab693
Merge #439
439: Refactor usage tracking to be truly sparse r=dependency a=kvark

~~This is a required step towards #438 . We want to be tracking the usage by only having resource IDs around, not resources themselves. So we aren't going to have access to `full_selector`.~~

It's also streamlining some of the verbose parts of the internal API for usage tracking.
It also uses `SmallVec` for the texture tracker ranges, essentially making it lightweight for most cases (where the layer count is 1).

Compromises:
  - removes `SEPARATE_DEPTH_STENCIL_STATES` support. It's not in the near future to enable it anyway.

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-01-09 04:23:34 +00:00
Dzmitry Malyshau
bcf533fd89 Refactor usage tracker init() 2020-01-08 23:19:52 -05:00
Dzmitry Malyshau
017a54ff97 Refactor usage tracking to be truly sparse 2020-01-08 22:43:19 -05:00
bors[bot]
ba0acc94a1
Merge #427
427: Rewrite of the resource lifetime tracking r=crossed-fingers a=kvark

Addresses this TODO item in `triage_referenced()`:
> //TODO: lock less, if possible

Now, also fixes #428 

Pros:
  - only locking the storages that need to be, and only for the duration of their cleanup
  - less run-time branching, more predefined code paths, which may lead to better cache utilization (thinking of both instruction and data cache here)
  - more consistent use of `Stored` type

Cons:
  - a bit of verbosity / code duplication in `triage_referenced()`. In particular, the code that finds where to register an unreferenced resource, it used to be unified for all resources.

---
@grovesNL this should be reviewable on a commit basis. The high-level breakdown of changes is:
  1. Switch from enum of resource types to structure of arrays for the matter of lifetime tracker
  2. Rename the involved structures to better reflect what they do (the old `PendingResources` was bad)
  3. Separate lifetime tracking into a sub-module
  4. Make `RefCount` in objects optional, getting the semantics of "user needs it" when `Some`.
  5. Rewrite the first stage of lifetime tracking: instead of permanently staging resources that the user doesn't need, and adding strong refcounts to them, we only populate it temporarily with anything that gets the refcount reduced. This means less overhead for `maintain()` at an increased risk of leaking some stuff (depends on our code quality).
  6. Consequently, device tracker becomes the main (and last) owner of all the resources.

Overall, it's a major change and risk. I tested on `vange-rs` (which I consider to be the most complex wgpu-rs app) with Vulkan validation enabled, and it seems all to be working good now.

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-01-08 23:26:44 +00:00
Dzmitry Malyshau
bbe0d7df1b Command buffer/encoder destruction 2020-01-08 18:14:45 -05:00
Dzmitry Malyshau
59a9d14c81 Suspect unlinked resources used in submissions 2020-01-08 18:14:07 -05:00
Dzmitry Malyshau
040efa2820 Fix refcount use of the texture view source 2020-01-08 18:13:43 -05:00
Dzmitry Malyshau
bf8c9fe27b Make device tracker to be the last home for destroyed resources 2020-01-08 18:13:43 -05:00
Dzmitry Malyshau
73f6fbbf88 use full Id paths in the device module 2020-01-08 18:10:53 -05:00
Dzmitry Malyshau
3a40ba2d60 Move lifetime tracker into a separate module 2020-01-08 18:10:53 -05:00
Dzmitry Malyshau
9acefac5b3 Heavy refactor of resource lifetime tracking 2020-01-08 18:06:28 -05:00
bors[bot]
eedc706ee7
Merge #442
442: Fix cmd buffer cleanup not always using lowest active index r=kvark a=LaylConway

This fixes the index picked for cleanup not always being the lowest index.
Additionally this fixes command buffers not being cleaned up if there are no active submissions, because in that case 0 would be picked, which resulted in nothing being cleaned up. Now instead if there are no active submissions, usize MAX will be picked.

Fixes #441 

Co-authored-by: Layl <2385329-layl@users.noreply.gitlab.com>
2020-01-08 04:54:01 +00:00
Layl
a221ca1c12 Fix cmd buffer cleanup not always using lowest active index 2020-01-08 01:17:58 +01:00
bors[bot]
39bf5a587e
Merge #433
433: Fix clippy warnings and errors r=trivial a=kvark



Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-01-04 18:21:33 +00:00
Dzmitry Malyshau
7be921495d Fix clippy warnings and errors 2020-01-04 13:20:28 -05:00
bors[bot]
98660cda1b
Merge #432
432: New deploy credentials r=grovesNL a=kvark

Also filters the tags to only start with "v"

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-01-04 15:39:19 +00:00
Dzmitry Malyshau
1d7ca0f20b New deploy credentials 2020-01-04 01:24:11 -05:00
Dzmitry Malyshau
33033e8be5
Add wgpu-py 2020-01-03 01:21:40 -05:00
bors[bot]
60476974b4
Merge #431
431: Expose FFI for creating wayland surface on wgpu-native r=kvark a=segfault87

* Added `wgpu_create_surface_from_wayland()` for creating Wayland surface from C side.
* Updated FFI header and `examples/triangle` example accordingly.

Co-authored-by: Park Joon-Kyu <segfault87@gmail.com>
2020-01-02 17:57:25 +00:00
Park Joon-Kyu
e91cfa4dc3 Enable wayland support for examples/triangle 2020-01-02 17:10:45 +09:00
Park Joon-Kyu
fc85128c41 Expose FFI for Wayland 2020-01-02 17:10:04 +09:00
bors[bot]
c293d6dcea
Merge #429
429: Defer command buffer recycling until allocate r=kvark a=LaylConway

As discussed on Matrix, this change defers command buffer recycling until allocation.
This lets a rendering thread clean up its own command buffers, making sure only the owning thread accesses anything from its command pool.

I have also added a TODO comment about cleaning up thread pools, which currently isn't happening as far as I can tell. This previously was an issue as well but now is a slightly bigger one as the command buffer wouldn't get recycled either.

I figured that, for now, fixing that issue is out of the scope of this PR. This PR focuses only on resolving the race condition causing the validation error.

This fixes #423

Co-authored-by: Layl <2385329-layl@users.noreply.gitlab.com>
2020-01-02 04:55:21 +00:00
Layl
ac8f75288f Use current active list instead of storing last done 2020-01-02 01:33:45 +01:00
Layl
b55cd162bf Defer command buffer recycling until allocate 2020-01-02 01:33:45 +01:00
bors[bot]
4f1542f3c9
Merge #430
430: Switch XlibHandle window to c_ulong r=kvark a=MarkSwanson



Co-authored-by: Mark Swanson <mark.swanson.sw@gmail.com>
2020-01-01 22:44:14 +00:00
Mark Swanson
c757ba827b Switch XlibHandle window to c_ulong 2020-01-01 10:49:00 -05:00
bors[bot]
2a2ab3dc2a
Merge #418
418: Hotfix deadlocks on resource cleanup r=kvark a=LaylConway

This resolves resource cleanup causing deadlocks with `maintain`, because of `Device::pending` being locked in reverse order.

I'm calling this a "hotfix" because I don't think this is a scaleable approach to resolve how the issue happened in the first place, but it alleviates current deadlocking isssues.

I'm not quite sure how `Token` works, so I don't know if I used that right here.

This fixes #417

Co-authored-by: Layl <2385329-layl@users.noreply.gitlab.com>
2019-12-31 06:07:35 +00:00
bors[bot]
8f42ba6676
Merge #412
412: Another big tracking refactor r=later a=kvark

Fixes #409
Note: there is way more code that had to be thrown out in the process of this PR than there is in the PR itself.
Also fixes [this comment](04e17b3f4f/wgpu-core/src/track/texture.rs (L29)):
> //TODO: make this less awkward!

## Logic
Instead of having a run-time per-operation control over what state is being used for stitching (with `Stitch` enum), we are now deriving this automatically on a per-subresource level. Whenever we are detecting a transition for a sub-resource, and we know there wasn't any "first" state associated with it in the current tracker, we are saving this "first" state. Unlike previous code, where it was confusing what of `Unit` fields (`init`, `last`) are valid, now `first` is `Option<>`, so we know we should be using it if it's there.

This allows us to have this hybrid tracking state of a render pass, where all resources are immutable (and their usage is extended), except for the output attachments. This, together with a whole lot of refactoring, gets us #409.

I'm actually quite happy with the tracking code now. It's finally taking shape we aren't afraid to tell others about :)

Note: this was tested on wgpu-rs examples and vange-rs.

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2019-12-30 23:11:52 +00:00
bors[bot]
890bbcfbed
Merge #416 #420 #424
416: Makefile package command and travis github releases r=kvark a=Korijn

Closes #414

Approach mostly mimicked from [gfx-portability](https://github.com/gfx-rs/portability) as recommended to me by @kvark. I needed a number of commits to iron out some kinks for the Windows builds, so I would recommend using squash merge when accepting this PR.

Note that the Windows rust=nightly build fails, but it's also broken on master, so it's unrelated to the changes in this PR.

/cc @almarklein

# Questions

- [x] Would it make sense to also regenerate the `ffi/wgpu.h` and `wgpu-remote.h` header files and include them in the zip archive?

# Todo for maintainers

- [x] Configure encrypted `api_key`
As in [gfx-portability](https://github.com/gfx-rs/portability/blob/master/.travis.yml#L61) you will need to create an API key and commit it to the `.travis.yml` file. I've checked "allow edits from maintainers" so you should be able to commit to this branch directly. You may want to reference the [Travis instructions](https://docs.travis-ci.com/user/deployment/releases/#authenticating-with-an-oauth-token) as well.

- [ ] Tag revisions
Previous versions (`v0.1` - `v0.4`) have not been tagged on the master branch, you will want to do so retroactively. Also, when releasing in the future, make sure to tag the commit before pushing. Alternatively, you can schedule a travis build manually after applying the tag retroactively.

420: Make Origin3d::{x,y,z} all have type u32 r=kvark a=fintelia

Fixes #419 

424: swapchain creation: check if selected present mode is supported r=kvark a=Veykril

Implements a simple check as talked about in #350 to fallback to `FIFO` should the selected present mode not be available on the system.

Co-authored-by: Korijn van Golen <k.vangolen@clinicalgraphics.com>
Co-authored-by: Korijn van Golen <korijn@gmail.com>
Co-authored-by: Jonathan Behrens <fintelia@gmail.com>
Co-authored-by: Veykril <lukastw97@gmail.com>
2019-12-30 19:26:21 +00:00
bors[bot]
7d8a1d550c
Merge #426
426: configure rust msvc toolchain on windows on travis r=kvark a=Korijn

Closes #425 

@LaylConway's [proposal](https://github.com/gfx-rs/wgpu/issues/425#issuecomment-569737145) was right.

Apparently Travis configures the non-standard GNU toolchain on Windows by default; it's unclear why and kind of defeats the point of Windows CI for this project, so we reconfigure it to use the MSVC toolchain manually in the `before_install` stage.

/cc @kvark

Co-authored-by: Korijn van Golen <k.vangolen@clinicalgraphics.com>
2019-12-30 19:09:18 +00:00
Korijn van Golen
9e7c2da298 configure rust msvc toolchain on windows on travis 2019-12-30 19:40:03 +01:00
Korijn van Golen
52de829094
Copy API key from gfx-portability
Usage OK'd by @grovesNL
2019-12-30 17:31:15 +01:00