Commit Graph

770 Commits

Author SHA1 Message Date
daxpedda
cd8e2a30b2 Duplicate DeviceType from gfx-hal. 2020-01-26 23:09:58 +01:00
daxpedda
8c80557dd6 Return custom AdapterInfo that contains backend. 2020-01-25 18:22:34 +01:00
bors[bot]
009bde0f90 Merge #468
468: Switch value of BufferUsage's INDIRECT and STORAGE_READ fields r=kvark a=almarklein

Closes #467. This makes the value of `INDIRECT` equal to it's value in the IDL spec. (`STORAGE_READ` is not present in the IDL spec.)

I changed the value in `resource.rs` and then ran `make ffi/wgpu.h`.


Co-authored-by: Almar Klein <almar.klein@gmail.com>
2020-01-23 16:26:53 +00:00
bors[bot]
b7cdf90cbe Merge #471
471: Run clippy only when not on nightly r=kvark a=yanchith

... otherwise run `check`

https://github.com/gfx-rs/wgpu/pull/468#issuecomment-577451412

Co-authored-by: yanchith <yanchi.toth@gmail.com>
2020-01-23 15:54:16 +00:00
yanchith
dca7d54fd3 Run clippy only when not on nightly 2020-01-23 16:05:44 +01:00
bors[bot]
61d9e87c6b Merge #470
470: Fix building on Rust 1.37 r=kvark a=kvark

It doesn't like by-move pattern with an `if`

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-01-23 05:52:38 +00:00
Dzmitry Malyshau
b9e7449b43 Fix building on Rust 1.37
It doesn't like by-move pattern with an `if`
2020-01-23 00:52:04 -05:00
Almar Klein
299a051db1 Switch value of BufferUsage's INDIRECT and STORAGE_READ fields
This makes the value of INDIRECT equal to it's value in the IDL spec.
(STORAGE_READ is not present in the IDL spec).
2020-01-22 08:07:07 +01:00
bors[bot]
c59e35e9cb Merge #466
466: Refactored swapchain tracking r=sibling a=kvark

This is a sibling of #465 for master.
Fixes #227

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-01-21 19:27:06 +00:00
Dzmitry Malyshau
8a5de68aab Refactor the swap chain frame tracking 2020-01-21 14:24:45 -05:00
Dzmitry Malyshau
ec54038e7c Improve STORAGE_READ support for buffers 2020-01-21 14:13:27 -05:00
Dzmitry Malyshau
ad7045455c Optionally request vertex shader stores and atomics 2020-01-21 14:12:08 -05:00
bors[bot]
5e6eba05bb Merge #462
462: Using default nsview if not provided by raw-window-handle r=kvark a=lmcgrath

Per #453 I've added some native code to get the default `NSView` if it's not provided by `RawWindowHandle`. This is to support libraries like SDL2 which expose an `NSWindow` but no `NSView`. I'm using the [`[NSWindow contentView]`](https://developer.apple.com/documentation/appkit/nswindow/1419160-contentview) property to get the `NSView`.

Co-authored-by: Logan McGrath <1755866+lmcgrath@users.noreply.github.com>
2020-01-18 18:17:23 +00:00
Logan McGrath
7927f4cb2b Using default nsview if not provided by raw-window-handle 2020-01-18 10:06:10 -08:00
bors[bot]
7387bd1a4d Merge #461
461: Add Clippy to CI, fix errors and most warnings r=kvark a=yanchith

A quick rundown of changes:

- Fixed instances of clippy error [not_unsafe_ptr_arg_deref](https://rust-lang.github.io/rust-clippy/master/index.html#not_unsafe_ptr_arg_deref): Some extern functions in wgpu-remote are now marked unsafe, as they accessed data behind raw pointer via `Box::from_raw` and `slice::from_raw_parts` (commit 741844cc2b)

- Fixed clippy warning [or_fun_call](https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call) by changing `unwrap_or` to `unwrap_or_else`

- Added `#[allow(clippy::range_plus_one)]` in places where ranges are constructed along with TODOs to fix upstream in gfx. The rule [range_plus_one](https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one) is great if you have everything in one crate, but the gfx hal structs expect `Range` instead of the more generic `RangeBounds` trait.

- Fixed quite a few clippy warnings [missing_safety_doc](https://rust-lang.github.io/rust-clippy/master/index.html#missing_safety_doc) in the trivial cases (`Box::from_raw` and `slice::from_raw_parts`).

There's still a few `missing_safety_doc` warnings left. They all have in common the usage of the unsafe functions `RawPass::encode` and `RawPass::encode_slice`. I think these could potentially be made safe - it seems like `RawPass` manages its invariants internally, but I might be missing something.

I didn't add CI code that posts the warnings to github PR comments, but if anyone is willing to pick that up, this could help: https://github.com/dpobel/damien.pobel.fr/pull/62/files

Fixes: #422

Co-authored-by: yanchith <yanchi.toth@gmail.com>
2020-01-18 16:08:33 +00:00
yanchith
cd114e780a Don't forget to install clippy 2020-01-17 17:58:42 +01:00
yanchith
b6215db57d Modify CI script to run clippy instead of check 2020-01-17 16:30:12 +01:00
yanchith
ab205b042c Add # Safery docs to wgpu-core 2020-01-17 16:15:05 +01:00
yanchith
d24d7157cf Add # Safety docs to wgpu-native 2020-01-17 15:18:35 +01:00
yanchith
8414b01403 Add # Safety docs to wgpu-remote
Only two unsafe functions were used internally:

- `slice::from_raw_parts`
- `Box::from_raw`

The safety messages are adapted from the safety messages of these functions.
2020-01-17 15:04:57 +01:00
yanchith
0d9ad70468 Add TODOs for range_plus_one clippy warnings 2020-01-17 14:44:17 +01:00
yanchith
53b9a01b2f Resolve trivial clippy warning 2020-01-17 14:44:02 +01:00
yanchith
741844cc2b Fix clippy errors
In wgpu-remote, some functions are now marked `unsafe` on the outside,
because they dereferenced a raw pointer they couldn't have checked
themselves.
mozilla-bb908b9156834ac2f3b297ebac9bde2e0ed3fc2e
2020-01-17 14:20:20 +01:00
bors[bot]
3a41272cba Merge #448
448: Fix framebuffers not always being cleaned up if invalid r=kvark a=LaylConway

This changes framebuffers to be cleaned up if only one view is cleaned up, instead of if all views are cleaned up. This is necessary because currently, at least for me, swapchain images will have a different view every frame. This means that if other views continue to exist between frames, the resulting framebuffers will never be cleaned up.

Fixes #447

Co-authored-by: Layl <2385329-layl@users.noreply.gitlab.com>
2020-01-15 14:24:19 +00:00
Layl
6202d5ddad Fix framebuffers not always being cleaned up if invalid 2020-01-15 15:11:16 +01:00
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