Commit Graph

1489 Commits

Author SHA1 Message Date
Vincent Jousse
0899bb7207 Fix build for wasm32 target 2020-12-18 22:09:20 +01:00
bors[bot]
89e585af61 Merge #1093
1093: Update naga and gfx, move the shader validation into a shader descriptor bit r=cwfitzgerald a=kvark

**Connections**
Includes https://github.com/gfx-rs/gfx/pull/3533 and a bunch of Naga things.

**Description**
Updates Naga with the new WGSL syntax, lots of fixes.
Large update of the GL backend.

**Testing**
Tested on some wgpu-rs examples.

Co-authored-by: Dzmitry Malyshau <kvark@fastmail.com>
2020-12-17 16:34:28 +00:00
Dzmitry Malyshau
f07cc8156b Update naga and gfx, move the shader validation into a shader descriptor bit 2020-12-17 11:33:47 -05:00
bors[bot]
066a5978d5 Merge #1092
1092: Optimize submit() for no command buffers r=kvark a=kvark

**Connections**
Just a few bits I found when tinkering with API traces.

**Description**
No need to lock the world if there are no command buffers.

**Testing**
tested on API traces

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-12-16 20:05:27 +00:00
Dzmitry Malyshau
b84301110c Optimize submit() for no command buffers 2020-12-16 15:02:09 -05:00
bors[bot]
42a8dc5b34 Merge #1090
1090: Clean up render pass labels r=kvark a=kvark

**Connections**
Follow-up to #1088 to fix https://github.com/gfx-rs/wgpu/issues/1089#issuecomment-745596393

**Description**
Render passes are recorded into their own command buffers under the hood, and I forgot to properly reset the labels on them.

**Testing**
Untested

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-12-15 22:30:22 +00:00
Dzmitry Malyshau
cb67ef6542 Clean up render pass labels 2020-12-15 17:28:24 -05:00
bors[bot]
03d2c57dc5 Merge #1088
1088: Fix and improve object labels and command markers r=cwfitzgerald a=kvark

**Connections**
Fixes a part of #1089 

**Description**
PR contains a bunch of small but important things:
  - reset the command buffer label after submission
  - add labels to compute and pass descriptors
  - actually push/pop markers for the scope of render bundle, compute passes
  - set the label to render pass command buffers
  - set labels on pipelines

**Testing**
Not tested much

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-12-15 18:10:59 +00:00
Dzmitry Malyshau
394135f725 Fix and improve object labels and command markers 2020-12-15 11:28:11 -05:00
bors[bot]
01733a2f45 Merge #1086
1086: Add SHADER_READ usage bit to non-readonly buffers r=kvark a=infinitesnow

Change-Id: I99d189e7ef295a58c2179635f95656eb9a2f5fe6

**Connections**
Fixes #949

**Description**
 Non-readonly buffers are created with the STORAGE_WRITE usage flag, but that implies SHADER_READ too.

Co-authored-by: Emanuele Dalla Longa <3xplosive.g@gmail.com>
2020-12-10 16:22:43 +00:00
Emanuele Dalla Longa
b3f18ff3c5 Add SHADER_READ usage bit to non-readonly buffers
Change-Id: I99d189e7ef295a58c2179635f95656eb9a2f5fe6
2020-12-10 17:20:29 +01:00
bors[bot]
69196d85a3 Merge #1077
1077: Remove extern "C" from set_index_buffer r=kvark a=DevOrc

**Connections**
Fixes an issue that is blocking gfx-rs/wgpu-native#61

**Description**
Moves the ffi definition of wgpu_render_bundle_set_index_buffer / wgpu_render_pass_set_index_buffer to wgpu-native. This is needed because wgpu-native has its own version of IndexFormat that is different than the wgpu_types version. 

**Testing**
My projects with wgpu-native work


Co-authored-by: Noah Charlton <ncharlton002@gmail.com>
2020-12-08 15:45:00 +00:00
Noah Charlton
b71c47a064 Remove extern "C" from set_index_buffer 2020-12-07 17:03:54 -05:00
bors[bot]
071ccf24c9 Merge #1080
1080: Fix the validation of vertex buffer sizes r=kvark a=JCapucho

**Connections**
None that i know of

**Description**
~~The vertex buffer size (in vertices) was being divided by stride causing the limit to be lower than it was supposed to be.~~
This bug wasn't triggered earlier because if the stride was 0 it wouldn't perform any calculation and the stride was only set when a set pipeline command was received and the `VertexState` `inputs` were already created so the following commands would work:
```
SetPipeline with 1 vertex buffer
SetVertexBuffer with only 4 vertices
Draw 6 vertices
```
This would have passed validation while this wouldn't
```
SetPipeline with 1 vertex buffer of stride 8
SetVertexBuffer with 4 vertices
SetPipeline with 1 vertex buffer of stride 8
SetVertexBuffer with 4 vertices
Draw 3 vertices
```

Now all draw calls have proper vertex validation and not only after the `inputs` are populated

**Testing**
This change was tested after debugging an issue with the draw calls failing in a specific order in [veloren](https://gitlab.com/veloren/veloren/-/tree/imbris/wgpu-master-rebased)

Co-authored-by: Capucho <jcapucho7@gmail.com>
2020-12-07 15:48:11 +00:00
Capucho
713c23bc42 Grow the VertexState inputs in SetPipeline 2020-12-07 15:45:20 +00:00
bors[bot]
4846e41eb0 Merge #1078
1078: Switch paytests to WGSL r=grovesNL a=kvark

**Connections**
Closes #1073
Updates naga to "gfx-4" tag.
Updates gfx to https://github.com/gfx-rs/gfx/pull/3518

**Description**
This is the first use of WGSL in our codebase! Much nicer to have WGSL for tests than keeping GLSL+SPV pairs.
Interestingly, the tests go through Naga without ever touching SPIR-V now, unless running on Vulkan.

**Testing**
Tests itself - this change applies to testing infra.

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-12-07 06:33:02 +00:00
Dzmitry Malyshau
a316fff427 Update Naga to gfx-4, update gfx with GL fixes 2020-12-07 01:30:52 -05:00
Dzmitry Malyshau
3f33434c6f Enable experimental translation to playtests 2020-12-06 15:14:14 -05:00
Dzmitry Malyshau
dccc57e7b5 Switch playtests to WGSL 2020-12-06 14:51:23 -05:00
bors[bot]
7b886f4b1e Merge #1074
1074: Implement ETC2 and ASTC textures r=kvark a=cwfitzgerald

**Connections**

Closes #1070. Makes progress towards #1069.

**Description**

This PR has multiple functions:
 - Adds ETC and ASTC compressed textures behind features.
 - Adds three helper functions on `Extent3d` that help in calculating mip sizes: `at_mip_level`, `max_mips`, and `physical_size`.
 - Refactors various conversions into a public `TextureFormat::describe` function. I have used a decl macro to ease in the declaration and modifcation of an otherwise horribly verbose function.

I have tried to use clever multi-select based data copying to reduce the possibility for errors, but there's a _lot_ of data moving around here.

**Testing**

Upcoming wgpu-rs pr adding wider compressed texture support to the skybox example. Helper functions were tested with doctests.

Marked as draft until I can get the wgpu-rs pr done and prove it works, it is, however, ready for review.


Co-authored-by: Connor Fitzgerald <connorwadefitzgerald@gmail.com>
2020-12-06 00:31:39 +00:00
Connor Fitzgerald
19fb491262 Fix validation of compressed mipmaps 2020-12-05 19:30:26 -05:00
Connor Fitzgerald
8f430ab1ef Implement ETC2 and ASTC textures 2020-12-05 19:30:26 -05:00
bors[bot]
d430e044b5 Merge #1076
1076: Fix player warnings r=kvark a=kvark

```
warning: unused `std::result::Result` that must be used
   --> player/src/bin/play.rs:142:29
    |
142 | ...                   gfx_select!(device => global.device_create_swap_chain(device, surface, &desc));
    |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: `#[warn(unused_must_use)]` on by default
    = note: this `Result` may be an `Err` variant, which should be handled
    = note: this warning originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)

warning: unused `std::result::Result` that must be used
   --> player/src/bin/play.rs:147:29
    |
147 | ...                   gfx_select!(device => global.swap_chain_present(id));
    |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: this `Result` may be an `Err` variant, which should be handled
    = note: this warning originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)

warning: unused `std::result::Result` that must be used
   --> player/src/bin/play.rs:173:21
    |
173 |                     gfx_select!(device => global.device_poll(device, true));
    |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: this `Result` may be an `Err` variant, which should be handled
    = note: this warning originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)

warning: 3 warnings emitted
```

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-12-05 23:56:38 +00:00
Dzmitry Malyshau
91a66b4b4a Fix player warnings 2020-12-05 18:55:27 -05:00
bors[bot]
9960ded7ae Merge #1071
1071: Add pervasive Naga support to shader module loading r=cwfitzgerald a=kvark

**Connections**
Depends on https://github.com/gfx-rs/naga/pull/299 and https://github.com/gfx-rs/gfx/pull/3503
Closes #1072

**Description**
    The purpose of the PR is to support Naga modules everywhere.
    As a requirement, it updates the gfx-rs version used.
    Most of the logic is dedicated towards building a shader interface,
    where previously we just used naga's IR. Now we have our own mini-IR.

**Testing**
Tested in https://github.com/gfx-rs/wgpu-rs/pull/663 (without the experimental feature).
Enabling the experimental feature doesn't work even on the play test that we have - https://github.com/gfx-rs/naga/issues/300

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-12-05 21:34:33 +00:00
Dzmitry Malyshau
749f737c89 Add pervasive Naga support to shader module loading
The purpose of the PR is to support Naga modules everywhere.
As a requirement, it updates the gfx-rs version used.
Most of the logic is dedicated towards building a shader interface,
where previously we just used naga's IR. Now we have our own mini-IR.
2020-12-05 11:31:03 -05:00
Dzmitry Malyshau
d164b0dbc6 Add license to big-picture.xml 2020-12-03 14:52:38 -05:00
bors[bot]
ab3d514677 Merge #1019
1019: Match upstream API changes for IndexFormat r=kvark a=kejor

**Connections**
#978 

**Description**
Match upstream API changes for IndexFormat.

- `index_format` from `VertexStateDescriptor` is now a `Option`
- `RenderCommand::SetIndexBuffer` now has a `index_format` attribute
- The index format for execution is now set when matched both `RenderCommand::SetPipeline` and `RenderCommand::SetIndexBuffer`.

**Testing**
Tested with the examples of e5f82a2197

---

Should I implement this?0855ad9b97/spec/index.bs (L3703)

Co-authored-by: kejor <kevinoviedorueda@gmail.com>
2020-12-02 03:03:46 +00:00
kejor
4513fb2b83 Match upstream API changes for IndexFormat 2020-12-01 19:19:41 -05:00
bors[bot]
2d87fd9067 Merge #1057
1057: Move to gfx master r=cwfitzgerald a=kvark

**Connections**
Fixes #1027

**Description**
Switches us to gfx dependency on github.
Note: there is problem with libc dependency - https://github.com/timothee-haudebourg/khronos-egl/issues/7 - that would need to be resolved before we get this version of the code into either Gecko or Servo.

**Testing**
Ran wgpu-rs examples

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-12-01 03:56:44 +00:00
Dzmitry Malyshau
9e2f6c2f01 Move to gfx master 2020-11-30 22:50:13 -05:00
bors[bot]
623763bf96 Merge #1056
1056: Replace gfx-descriptor by gpu-descriptor r=cwfitzgerald a=kvark

**Connections**
Unblocks #1027
cc @zakarumych 

**Description**
Removes the last link we had between us and gfx-rs.

**Testing**
Tested on wgpu-rs

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-12-01 02:49:15 +00:00
Dzmitry Malyshau
10c11d718d Replace gfx-descriptor by gpu-descriptor 2020-11-30 21:48:04 -05:00
bors[bot]
67e652f471 Merge #1047
1047: Update bind group layout API to match upstream r=cwfitzgerald a=kvark

**Connections**
Follows https://github.com/gpuweb/gpuweb/pull/1076, https://github.com/gpuweb/gpuweb/pull/1223 (https://github.com/gpuweb/gpuweb/issues/1164), https://github.com/gpuweb/gpuweb/pull/1255, and https://github.com/gpuweb/gpuweb/pull/1256

**Description**
Aligns our API closer to the latest changes in WebGPU upstream. We technically don't have to do this, but I believe in the end it would be best if our API gets close to upstream.

Note: this is a sensitive change for the users, everybody will get their code broken. So please take a look at the API and see if something is missing or needs improvement, so that we don't have to go through the changes again afterwards.

**Testing**
Doesn't really need testing. Partially covered by the existing playtest.

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-11-30 22:31:49 +00:00
bors[bot]
3efba7712a Merge #1055
1055: Disable gfx-backend-gl on macOS r=kvark a=lordnoriyuki

Resolve the wgpu side of https://github.com/gfx-rs/wgpu-rs/issues/646
wgpu-rs will need two changes:
e59ea495a6/Cargo.toml (L53)
e59ea495a6/src/backend/direct.rs (L69)

Co-authored-by: lordnoriyuki <lordnoriyuki@gmail.com>
2020-11-30 01:36:18 +00:00
lordnoriyuki
e160de87d5 Merge remote-tracking branch 'upstream/master' 2020-11-28 16:13:37 -08:00
lordnoriyuki
162cd6bd86 Disable gfx-backend-gl on macOS 2020-11-28 16:11:16 -08:00
bors[bot]
9d12d623c7 Merge #1054
1054: Flush write_texture staging memory r=kvark a=kvark

**Connections**
Fixes part of https://github.com/gfx-rs/wgpu-rs/issues/648

**Description**
Adds the missing flush to the staging buffer in `write_texture`

**Testing**
Untested

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-11-28 18:50:44 +00:00
Dzmitry Malyshau
ee87d7fae7 Flush write_texture staging memory 2020-11-28 12:12:51 -05:00
Dzmitry Malyshau
5949dec61d Update bind group layout API to match upstream 2020-11-28 00:30:27 -05:00
bors[bot]
dd31c924df Merge #1052
1052: Check for missing fragment shader outputs r=kvark a=kvark

**Connections**
Fixes  #1046

**Description**
Introduces a proper error for the missing outputs

**Testing**
Untested

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-11-27 17:46:56 +00:00
Dzmitry Malyshau
e5204e915c Check for missing fragment shader outputs 2020-11-27 12:44:31 -05:00
bors[bot]
99bc5679ed Merge #1051
1051: Register init-destination buffer in the pending writes r=kvark a=kvark

**Connections**
Fixes #1049

**Description**
At some recent point we introduced the map of destination buffers for copies, and I missed the case where buffers are mapped at creation.

**Testing**
Tested on the test-case in #1049

Co-authored-by: Dzmitry Malyshau <kvark@fastmail.com>
2020-11-26 22:00:46 +00:00
Dzmitry Malyshau
992e240938 Register init-destination buffer in the pending writes 2020-11-26 16:59:25 -05:00
bors[bot]
8cc7bbd480 Merge #1050
1050: player: use the wgpu-cores's gfx-select macro r=kvark a=kvark

**Connections**
Looks like I broke the player in #1034, surprised we didn't notice, and that `cargo test` still passed. The problem was having the `Empty` backend for the device.

**Description**
Fixes the `device` backend in the player, switches the backend set to be `PRIMARY`, and re-uses the `wgc::gfx-select`.

**Testing**
Replaying a trace from #1049

Co-authored-by: Dzmitry Malyshau <kvark@fastmail.com>
2020-11-26 19:50:54 +00:00
Dzmitry Malyshau
55851add9b player: use the wgpu-cores's gfx-select macro 2020-11-26 14:47:48 -05:00
bors[bot]
75b46976a3 Merge #1048
1048: Make VertexFormat::size a const fn r=kvark a=Imberflur

**Connections**
Addresses #836 

**Description**
The `vertex_attr_array!` macro uses this function. This change enables the macro to be used in `const` contexts and for instance allows returning a `VertexBufferDescriptor` constructed in function without having the difficulties of ensuring the array from `vertex_attr_array!` lives long enough.

**Testing**
I don't believe testing is needed for this.
<!--
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: Imbris <imbrisf@gmail.com>
2020-11-26 18:06:21 +00:00
Imbris
44a20d72ef Make VertexFormat::size a const fn 2020-11-26 03:36:13 -05:00
bors[bot]
fd99466867 Merge #1045
1045: Updating to latest gpu-alloc r=grovesNL a=lordnoriyuki

Fixes https://github.com/gfx-rs/wgpu/issues/1043

Co-authored-by: lordnoriyuki <lordnoriyuki@gmail.com>
2020-11-25 03:16:18 +00:00
lordnoriyuki
c80ca8dbe4 Updating to latest gpu-alloc 2020-11-24 19:10:46 -08:00