Commit Graph

1141 Commits

Author SHA1 Message Date
bors[bot]
2208048a89 Merge #789
789: Panic on using a pending buffer r=kvark a=kvark

**Connections**
Validates the use case of https://github.com/gfx-rs/wgpu-rs/issues/436

**Description**
We didn't detect if a buffer had pending *initial* mapping, previously, on submit.

**Testing**
Untested

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-07-13 15:51:50 +00:00
bors[bot]
d7ee89018b Merge #791
791: Unify `wgpu-core` and `wgpu-rs` types r=kvark a=GabrielMajeri

**Connections**
Closes #689.

**Description**
Moves a lot of types from `wgpu-rs` which were duplicated in `wgpu-core` to `wgpu-types`.

**Testing**
Checked with core, player and `wgpu-rs`.

Corresponding `wgpu-rs` PR: https://github.com/gfx-rs/wgpu-rs/pull/437

Co-authored-by: Gabriel Majeri <gabriel.majeri6@gmail.com>
2020-07-13 15:45:09 +00:00
Gabriel Majeri
f3b80f1d8d Unify wgpu-core and wgpu-rs types 2020-07-13 18:39:49 +03:00
bors[bot]
08c873969c Merge #790
790: core: make DeviceType repr(u8) r=kvark a=DavidPeicho

**Connections**

This PR will make gfx-rs/wgpu-native#43 mergeable.

**Description**

`DeviceType` wasn't made to be used in FFI. The enum is now set to `#[repr(u8)]`.

**Testing**

It's not tested 💯 


Co-authored-by: David Peicho <david.peicho@gmail.com>
2020-07-13 13:55:35 +00:00
David Peicho
257151b9a4 core: make DeviceType repr(u8) 2020-07-13 10:45:47 +01:00
Dzmitry Malyshau
b7695ceac3 Panic on using a pending buffer 2020-07-13 00:54:24 -04:00
bors[bot]
8a038ba66e Merge #788
788: Make register methods public again r=kvark a=kvark

Fixup after #783
Should unblock https://github.com/gfx-rs/wgpu-rs/pull/430

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-07-12 18:41:36 +00:00
Dzmitry Malyshau
dd38c7ba03 Make register methods public again 2020-07-12 14:39:38 -04:00
bors[bot]
ea680b964d Merge #787
787: Remove non-exhaustive markers r=kvark a=GabrielMajeri

Based on the previous [discussion](https://github.com/gfx-rs/wgpu/pull/774#issuecomment-657171354), this PR removes the `NonExhaustive` structure and any `#[non_exhaustive]` attribute since it's too early to decide how to ensure forward compatibility.

**Testing**
Checked the `core`, `types` and `player` crates.

Co-authored-by: Gabriel Majeri <gabriel.majeri6@gmail.com>
2020-07-12 18:22:21 +00:00
Gabriel Majeri
9cd3d47ce7 Remove non-exhaustive markers 2020-07-12 19:56:04 +03:00
bors[bot]
28a3cdc22b Merge #783
783: Basic use of Error for bind groups r=kvark a=kvark

**Connections**
Follow up to #776 

**Description**
Trying to tidy up a few things and add a public use of `Error` variant

**Testing**
not tested

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-07-12 03:44:36 +00:00
Dzmitry Malyshau
967217f89b Basic use of Error for bind groups 2020-07-11 23:41:43 -04:00
bors[bot]
6f48482ef3 Merge #782
782: Add check while trying to remove uninserted Ids r=kvark a=kunalmohan

**Connections**
_Link to the issues addressed by this PR, or dependent PRs in other repositories_
An attempt to fix #781 
regression from #776 

**Description**
_Describe what problem this is solving, and how it's solved._
When we used `VecMap`, it simply returned `None` for even out of bounds access to the map (We depended on it returning `None`). After #776 , we get a panic. So adding a simple index check before accessing it fixes this issue.

**Testing**
_Explain how this change is tested._
Tested on wgpu-rs examples with the changes in https://github.com/gfx-rs/wgpu-rs/pull/430. All examples run fine except the `cube` which segfaults.
<!--
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: Kunal Mohan <kunalmohan99@gmail.com>
2020-07-11 22:32:33 +00:00
Kunal Mohan
4a116fca38 Add check while removing uninserted Ids 2020-07-12 01:13:34 +05:30
bors[bot]
bd9167ebbc Merge #779
779: Fix hub insertion r=kvark a=kvark

**Connections**
Fixes #778 
Follow-up to #776

**Description**
Problem was `resize_with` takes new length, not a difference.

**Testing**
Untested

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-07-11 14:32:02 +00:00
Dzmitry Malyshau
aa5676b1f2 Fix hub insertion 2020-07-11 10:30:26 -04:00
bors[bot]
7d5082753b Merge #773
773: Error handling for data transfer API r=kvark a=GabrielMajeri

**Connections**
Work on the error model described in #376 

**Description**
Removes assertions from the transfer functions, instead returning a custom error type.

**Testing**
Checked with `player` and `wgpu-rs`: https://github.com/gfx-rs/wgpu-rs/pull/430

Co-authored-by: Gabriel Majeri <gabriel.majeri6@gmail.com>
2020-07-11 02:28:25 +00:00
Gabriel Majeri
98e4f73a10 Error handling for data transfer API 2020-07-10 21:50:22 +03:00
Kunal Mohan
26dcdaae59 Add Error State to Storages (#776)
* Add Error State to Storages
fix #772

* use resize function in insert

* address review comments
2020-07-10 14:29:22 -04:00
bors[bot]
68471acf56 Merge #770
770: Rename bindings to entries r=trivial a=kvark

**Connections**
Upstream https://github.com/gpuweb/gpuweb/pull/611

**Description**
Trivial rename of fields

**Testing**
Needs no test!

Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
2020-07-09 03:43:04 +00:00
Dzmitry Malyshau
e693170aef Rename bindings to entries 2020-07-08 23:41:09 -04:00
bors[bot]
d3e204127c Merge #769
769: Implement and Validate all WebGPU Limits r=kvark a=cwfitzgerald

**Connections**

None?

**Description**

This adds all the limits that webgpu has currently. It also validates the values.

The main piece of code here is `BindingTypeMaxCountValidator` and `PerStageBindingTypeCounter` which provides the interface for figuring out the maximum per-stage counts in the pipeline. For each `BindGroupLayout` a `BindingTypeMaxCountValidator`is put together during creation using all of the bindings. Then the `BindingTypeMaxCountValidator`s are combined into a single max. This is then validated against the max limits.

Each commit should be independently testable and are grouped by responsibility.

**Testing**

I modified the wgpu-rs example framework to ask for extremely reduced limits and then tested various examples to verify it properly accepted/rejected based on the actual limit.

Co-authored-by: Connor Fitzgerald <connorwadefitzgerald@gmail.com>
2020-07-08 03:29:51 +00:00
Connor Fitzgerald
36fa3b81b4 Validate BindGroup based limits 2020-07-07 23:27:42 -04:00
Connor Fitzgerald
1d5d7ddc40 Validate PipelineLayout based limits 2020-07-07 23:26:23 -04:00
bors[bot]
01cf22c25a Merge #768
768: Update gfx-extras for the memory changes r=trivial a=kvark

**Connections**
Helps https://github.com/gfx-rs/wgpu-rs/issues/423 quite a bit
Includes https://github.com/gfx-rs/gfx-extras/pull/24

**Description**
Just an update

**Testing**
wgpu-rs examples, internal fuzzying

Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
2020-07-07 20:43:06 +00:00
Dzmitry Malyshau
7686bb5cad Update gfx-extras for the memory changes 2020-07-07 16:41:26 -04:00
Connor Fitzgerald
238e6b74ee Populate limits struct 2020-07-07 16:12:03 -04:00
bors[bot]
7c71de35da Merge #766
766: Validate set_bind_group is within bounds of limit r=kvark a=cwfitzgerald

**Connections**

~~Don't think there are any.~~ Would provide a nicer error message for https://github.com/gfx-rs/wgpu-rs/issues/411.

**Description**

Implements checks related to our only limit.

**Testing**

Untested


Co-authored-by: Connor Fitzgerald <connorwadefitzgerald@gmail.com>
2020-07-07 19:26:07 +00:00
Connor Fitzgerald
f76b631961 Validate set_bind_group is within bounds of limit 2020-07-07 14:41:54 -04:00
bors[bot]
cfd21d4913 Merge #763
763: Remove raw pointers from the render pipelines API r=kvark a=GabrielMajeri

**Connections**
Rust-ification of API, as part of #689

**Description**
The objective is to get rid of raw pointers in the render pipeline descriptor and associated structures.

**Testing**
Checked with `player` and the `trace` feature, and with `wgpu-rs` with the changes in https://github.com/gfx-rs/wgpu-rs/pull/425

Co-authored-by: Gabriel Majeri <gabriel.majeri6@gmail.com>
2020-07-07 17:29:37 +00:00
Gabriel Majeri
d4eeea8118 Remove pointers from pipelines API 2020-07-07 19:37:04 +03:00
bors[bot]
438ac00115 Merge #764
764: Remove UnsafeFeatures as we decided the top level guard is not useful r=cwfitzgerald a=kvark

**Connections**
Reverts part of #691 about unsafe extensions

**Description**
Top-level unsafe is not sound. We still need unsafety close to the spot where it's triggered.

**Testing**
untested

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-07-07 13:05:22 +00:00
Dzmitry Malyshau
46230720b5 Remove UnsafeFeatures as we decided the top level guard is not useful 2020-07-06 23:46:46 -04:00
Oskar Nehlin
8a51f4bc7f Return result instead of panicking when requesting device. (#762)
* Return Result instead of panic for recoverable errors

* Update LimitsExceeded error variant

* Update LimitsExceeded error message
2020-07-06 16:45:11 -04:00
Oskar Nehlin
5b4b695ad3 Check parent adaptor limits instead of physical device limits (#761)
* Check parent adaptor limits instead of physical device limits

* Fix pr comment
2020-07-06 14:14:09 -04:00
bors[bot]
35481a5615 Merge #759
759: Bump the maximum bind groups to 8 r=kvark a=kvark

**Connections**
https://github.com/gfx-rs/wgpu-rs/issues/411#issuecomment-653756154

**Description**
This is the hard upper bound. It can be 4, technically, but it would make sense to raise it to at least 8.

**Testing**
Untested, should work still.

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-07-04 15:23:56 +00:00
Dzmitry Malyshau
15f3db7d83 Bump the maximum bind groups to 8 2020-07-04 11:17:51 -04:00
bors[bot]
349c021049 Merge #758
758: Require mapped buffers to be aligned r=cwfitzgerald a=kvark

**Connections**
Likely addresses https://github.com/gfx-rs/wgpu-rs/issues/420

**Description**
We require the size and offsets of mapping to be aligned to 4. This includes buffers mapped at creation.
It allows us to use buffer copy operations to sync the contents.

**Testing**
Not really tested


Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-07-01 14:56:03 +00:00
Dzmitry Malyshau
0929425477 Require mapped buffers to be aligned 2020-07-01 10:50:13 -04:00
bors[bot]
d90beda4e7 Merge #757
757: Validate Dynamic Bindings are In-Bounds r=kvark a=cwfitzgerald

**Connections**

Closes #756 

**Description**

Needed to store some basic info about all dynamic bindings in the bind group.

I wasn't exactly sure where to put the validation function, so I stuck it as an inherent function on the BindGroup. Can be moved if this isn't ideal.

I also moved offset alignment validation into the validation function to help reduce duplication between render/compute.

**Testing**

None of the examples use dynamic indexing, so it's hard to test this as is.

@FlorianUekermann could you possibly test this patch with your repro case?

Co-authored-by: Connor Fitzgerald <connorwadefitzgerald@gmail.com>
2020-07-01 02:59:39 +00:00
Connor Fitzgerald
b4f2c02941 Validate dynamic bindings are in-bounds 2020-06-30 22:54:24 -04:00
bors[bot]
43c67ac59c Merge #754
754: Implement MultiDrawIndirect Extensions r=kvark a=cwfitzgerald

**Connections**

Closes #742.

**Description**

These extensions, especially when combined with binding indexing, allow the creation of extremely cpu-efficient gpu powered pipelines.

Adds two extensions allowing various types of multi-draw-indirect
- MULTI_DRAW_INDIRECT (giving `multi_draw_indirect` and `multi_draw_indexed_indirect`)
- MULTI_DRAW_INDIRECT_COUNT (giving `multi_draw_indirect_count` and `multi_draw_indexed_indirect_count`)

This adds what I believe to be an extra restriction on the `*count` family of functions when compared to the underlying api. The buffer _must_ be large enough to draw `max_count` draws, even if that many draws are never drawn. This makes these operations no more unsafe than indirect would be, which is currently safe.

I did not implement these for renderbundles, but there's no reason they couldn't work, so those branches are marked with `unimplemented` as opposed to `unreachable`.

Additional Changes:
- Added some validation to the normal `draw_*_indirect` functions to prevent buffer overruns.
- The DX12 gfx-hal backend requires the strides to _always_ be non-zero, so I modified the normal indirect draws to use explicit strides.
- Made device limits and features `pub(crate)` as they need to be checked in random places in the code.

**Testing**

The change was tested using a modified version of wgpu-rs's texture-array example using a variety of permutations. I have not been able to test regular MULTI_DRAW_INDIRECT on mac, but I see no reason why that wouldn't work.

https://github.com/gfx-rs/wgpu-rs/pull/414

Co-authored-by: Connor Fitzgerald <connorwadefitzgerald@gmail.com>
2020-06-28 04:47:13 +00:00
Connor Fitzgerald
441b6e0d04 Implement MultiDrawIndirect Extensions 2020-06-27 23:43:23 -04:00
bors[bot]
a79222d502 Merge #755
755: Added independent blending to the list of required device features r=kvark a=Wumpf

Currently, using different blend modes on multiple render targets on the vulkan backend results in this validation error:

```
[2020-06-27T19:51:47Z ERROR gfx_backend_vulkan] 
    VALIDATION [VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (-884533293)] : Validation Error: [ VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 ] Object 0: handle = 0x2ea18313250, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0xcb4717d3 | Invalid Pipeline CreateInfo: If independent blend feature not enabled, all elements of pAttachments must be identical. The Vulkan spec states: If the independent blending feature is not enabled, all elements of pAttachments must be identical (https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605)
    object info: (type: DEVICE, hndl: 3204451480144)
```

This is caused by not requesting the independent blend feature from the device.

Given how the wgpu/webgpu API looks like (it makes it very easy to use independent blending) and that there is 100% coverage of this feature on the Vulkan [feature database](https://vulkan.gpuinfo.org/listfeatures.php), I suppose this is a bug, and here's the trivial fix for it 😃 

If this is not meant to be required I'd like to make it an optional feature.

Tested manually in my personal project via wgpu-rs, using Vulkan backend.
(on this [commit](69b660ac5a), uses locally changed gfx-rs/wgpu)

Co-authored-by: Andreas Reich <r_andreas2@web.de>
2020-06-27 22:38:18 +00:00
Andreas Reich
cd87f1e80f added independent blending to the list of required features 2020-06-27 22:33:47 +02:00
bors[bot]
2547c43307 Merge #753
753: Deduplicate BindGroupLayout by value r=cwfitzgerald a=kvark

**Connections**
Fixes #335 

**Description**
BGL now has distinct `MultiRefCount` type with a bit of a hacky logic to support deduplication.
Good review is needed!

**Testing**
Ran wgpu-rs examples.
The actual new logic is NOT tested enough!

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-06-27 17:01:20 +00:00
Dzmitry Malyshau
925010d117 Revise the atomic ordering on refcounts 2020-06-27 13:00:12 -04:00
Dzmitry Malyshau
e3280aa643 Deduplicate BindGroupLayout by value 2020-06-27 11:13:18 -04:00
bors[bot]
3b6e128877 Merge #752
752: gfx-memory update r=trivial a=kvark

**Connections**
Switches gfx-extras to https://github.com/gfx-rs/gfx-extras/pull/18
Fixes #750

**Description**
Includes important correctness fixes.

**Testing**
Tested on wgpu-rs examples on macOS.
Also, by @cwfitzgerald having the repro case of #750 

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-06-26 05:16:53 +00:00
Dzmitry Malyshau
448ecc1bb1 gfx-memory update 2020-06-26 01:12:58 -04:00