Commit Graph

9013 Commits

Author SHA1 Message Date
Dzmitry Malyshau
e57d877dbc [spv] fix storage buffer detection 2020-09-28 10:15:35 -04:00
bors[bot]
97d1a7eeb9 Merge #942
942: Fix clippy warnings about using if-let over match r=kvark a=lberrymage

The specific lint triggered was [clippy::single_match](https://rust-lang.github.io/rust-clippy/master/index.html#single_match).

**Description**
Details found in the link above

**Testing**
N/A


Co-authored-by: lberrymage <mageelog@gmail.com>
2020-09-28 13:05:36 +00:00
Dzmitry Malyshau
541d1dcb8b Fix convert_phong_lighting test feature checks 2020-09-28 01:10:57 -04:00
Dzmitry Malyshau
7e809c605a Remove validation error lifetime 2020-09-28 01:10:57 -04:00
lberrymage
41228ef1a4 Fix clippy warnings about using if-let over match
The specific lint triggered was
https://rust-lang.github.io/rust-clippy/master/index.html#single_match.
2020-09-25 23:02:51 -08:00
bors[bot]
49cf466dc4 Merge #941
941: Use self where possible r=kvark a=adamnemecek



Co-authored-by: Adam Nemecek <adamnemecek@gmail.com>
2020-09-26 03:13:22 +00:00
Adam Nemecek
db1870e7fc use self 2020-09-25 19:11:46 -07:00
Pelle Johnsen
df9834258f [glsl-in] Implement swizzle for r-values (#213)
* [glsl-in] Implement swizzle for r-values

Related to #210

* [glsl-in] Just return Result from field_selection

Removed unneccessary Otion in return type

* [glsl-in] Always match on type in field_selection

* [glsl.in] Borrow by value in field_selection
2020-09-25 10:32:50 -04:00
bors[bot]
645c121dda Merge #940
940: Fixed typo in texture size check r=kvark a=Fruup

**Connections**
https://github.com/gfx-rs/wgpu/issues/937

**Description**
The texture's depth was omitted in the check.

**Testing**
No tests needed.


Co-authored-by: Leon Scherer <scherer-leon@web.de>
2020-09-25 13:28:58 +00:00
Leon Scherer
1fecbe18ed Fixed typo in texture size check 2020-09-25 14:21:38 +02:00
bors[bot]
a56f9949ec Merge #938
938: Remove erroneous extra feature check r=kvark a=cwfitzgerald

**Connections**

None, found during investigation of DI issue.

**Description**

This line of code just shows up twice in a row, checking the same feature and setting the same feature.

**Testing**

Untested, but shouldn't affect anything.


Co-authored-by: Connor Fitzgerald <connorwadefitzgerald@gmail.com>
2020-09-24 13:18:04 +00:00
bors[bot]
cc169af549 Merge #935
935: Properly implement compute pass usage scopes r=cwfitzgerald a=kvark

**Connections**
Fixes #934 
Closes #933

**Description**
The old barriers in a compute pass were totally wrong. They didn't combine usages across the bind groups, or with indirect buffer.
This change implements the *actual* semantics as seen by the spec. At dispatch time we gather the usages across bind groups needed by the active pipeline, possibly add the indirect buffer into the mix, and that combined used is what we transition into.

I think we can find a few interesting ideas on how to make this faster. In particular - how to avoid a separate `TrackerSet` per pass. But for now correctness is more important.

**Testing**
Tested on wgpu-rs examples

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-09-23 23:09:06 +00:00
Dzmitry Malyshau
0345c56758 Properly implement compute pass usage scopes 2020-09-23 19:01:47 -04:00
Connor Fitzgerald
a9750f83bc Remove erroneous extra feature check 2020-09-23 18:13:54 -04:00
Nicholas Rishel
7ce99774d5 Add legend for supported end-points (#212)
There's no legend explaining what symbols mean for supported end-points, but it seems to be following the same format at wgpu. This PR copies wgpu's legend.
2020-09-23 00:48:31 -04:00
bors[bot]
e72724a6e3 Merge #936
936: Prevent an invalid texture from being registered in device_create_texture r=kvark a=kunalmohan

**Connections**
_Link to the issues addressed by this PR, or dependent PRs in other repositories_

**Description**
_Describe what problem this is solving, and how it's solved._
Since we checked the usage of a `Feature` in `device_create_texture()` after registering the new `Id`, there could be a case where it returns an error after registering the texture as a valid one, which further panics when the client tries to register it as an `error_id`.

To solve this, the check for the usage of a `Feature` is now done before registering the new `Id`.

**Testing**
_Explain how this change is tested._
Tested with wgpu-rs examples and CTS in Servo.
<!--
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-09-22 20:28:29 +00:00
Kunal Mohan
485dab9a52 Prevent an invalid texture from being registered in device_create_texture 2020-09-23 00:30:50 +05:30
Pelle Johnsen
e5d17e878b [glsl-in] Support anonymous global uniforms (#211)
* [glsl-in] Support anonymous global uniforms

Partly fixes #210

* [glsl-in] Handle anon global structs in fn prelude
2020-09-22 11:52:51 -04:00
Pelle Johnsen
8c48ae51ce [glsl-in] consolidate tests (#206)
* [glsl-in] consolidate tests

- remove simple lex test as was covered by others
- combine related tests to single function
- remove redundant prefix in test names

* [glsl-in] Consolidtae lex tests further
2020-09-22 11:50:56 -04:00
bors[bot]
7d70d8afbd [rs] Merge #577
577: Fixes #575 - vulkan-portability feature on MacOS r=kvark a=rybertm

See #575.
This PR fixes the issue with enabling `vulkan-portability` on MacOS.

Co-authored-by: Robert Broketa <robertbroketa@gmail.com>
2020-09-22 02:21:37 +00:00
Robert Broketa
79c50797cf [rs] Fixes #575 - vulkan-portability feature on MacOS 2020-09-21 14:32:46 -03:00
bors[bot]
9a4026129a [rs] Merge #574
574: Implement AsRef for BufferView r=kvark a=de-vri-es

This PR implements `AsRef` and `AsMut` in addition to `Deref` and `DerefMut` for `BufferView` and `BufferViewMut`.

This allows the buffer views to be used directly by generic code that wants an `AsRef<[u8]>`.

It's also subjectively a small win when you want to pass the views to non-generic code. I find `buffer.as_ref()` clearer than `&*buffer`. That also goes for `buffer.deref()`, but `Deref` is not in the prelude.

Co-authored-by: Maarten de Vries <maarten@de-vri.es>
2020-09-21 15:43:25 +00:00
Maarten de Vries
81df9fb707 [rs] Implement AsRef for BufferView
Remove AsRef<[u8]> for BufferViewMut.
2020-09-21 17:35:30 +02:00
bors[bot]
4b1c363def [rs] Merge #576
576: Convert swapchain.get_current_frame to a immutable reference r=kvark a=cwfitzgerald

Per our discussion on matrix, converts swapchain.get_current_frame to an immutable reference as it's internally synchronized.

Rationale: will allow me to take a non-pretty RW mutex as read instead of write in my application

Co-authored-by: Connor Fitzgerald <connorwadefitzgerald@gmail.com>
2020-09-20 19:33:08 +00:00
Connor Fitzgerald
f7b78115e3 [rs] Convert swapchain.get_current_frame to a immutable reference 2020-09-20 14:38:43 -04:00
Dzmitry Malyshau
0651eb8fab Complete expression/statement support in MSL, refactor conversion methods in WGSL, and remove Statement::Empty 2020-09-19 16:16:17 -04:00
Dzmitry Malyshau
ca492e43e6 [glsl] write the entry point (#207) 2020-09-18 17:26:32 -04:00
Timo de Kort
40f37c5c8c [spv-out] Combined all instruction spec tests to one test (#208) 2020-09-18 17:02:00 -04:00
João Capucho
0aae8ae6f8 glsl-out: More glsl versions (#191)
* Added support for glsl core version up to 400

* Added 330 to the list supported versions

* Added links to all extensions and fixed a extension being wrongfully activated

* Cleanup and check for image formats

* Removed useless extension and location on layout

* Added support for external functions and fixed global names

* Typefier allow Scalars in distance and length

* Addressed comments

* Fixed extension appearing after body

* Fixed entry point not being generated
2020-09-18 17:01:05 -04:00
Dzmitry Malyshau
d25ab1b1e8 Refactor image sampling arguments, add textureLoad support to WGSL 2020-09-18 10:53:26 -04:00
Dzmitry Malyshau
0aa91927b2 [wgsl] extend and refactor lexer tests 2020-09-18 10:01:56 -04:00
Dzmitry Malyshau
aa7005fdf3 [ir] Move scalar kind into the Sampled image class variant 2020-09-18 10:01:56 -04:00
Dzmitry Malyshau
7aff39784b [wgsl] texture operations 2020-09-18 10:01:56 -04:00
Dzmitry Malyshau
14feb9ac01 Validation of global variables and entry points 2020-09-17 16:12:56 -04:00
Pelle Johnsen
1c3f4513de [glsl.in] Implement field lookup 2020-09-17 14:11:09 -04:00
Dzmitry Malyshau
081b90f117 Consolidate rosetta tests 2020-09-17 10:16:32 -04:00
Dzmitry Malyshau
2ebaadaf0c Refactor entry point IR 2020-09-17 10:08:49 -04:00
bors[bot]
47c05b324f [rs] Merge #570
570: web: temporarily polyfill `create_buffer_init` r=kvark a=grovesNL

Temporarily polyfill `create_buffer_init` on the web backend by using the old buffer mapping API. This is just a temporary fix until the new buffer mapping API is available in Nightly.

This polyfill allows us to run `cube` from `master` on Nightly (there's still lots missing from other examples). But at least some simple use cases (e.g. projects only using `create_buffer_init`/`write_buffer` and no other buffer mapping functions) can run with `master`.

Co-authored-by: Joshua Groves <josh@joshgroves.com>
2020-09-17 03:20:06 +00:00
Joshua Groves
9270d85e3a [rs] web: temporarily polyfill create_buffer_init 2020-09-17 00:48:58 -02:30
Dzmitry Malyshau
74c4a3ce18 Add ArrayLength expression 2020-09-16 09:29:26 -04:00
bors[bot]
adfd90a148 [rs] Merge #569
569: Reorder framework canvas setup for web r=kvark a=grovesNL

winit only appends the canvas element once the window is built, and we need the canvas to exist before `create_surface` can use it. So we can just reorder the calls to build the window before using `create_surface` on the web backend in framework.

Also temporarily no-op debug markers for the web until we have them in gecko. Even though they're technically unimplemented, we can still proceed without them.

Co-authored-by: Joshua Groves <josh@joshgroves.com>
2020-09-16 03:57:52 +00:00
Joshua Groves
8153e29c98 [rs] Temporarily no-op debug marker functions for web 2020-09-16 01:05:12 -02:30
Joshua Groves
90cdc32c0c [rs] Reorder framework window creation for web 2020-09-16 01:04:49 -02:30
Pelle Johnsen
bcd3db2dad [glsl-in] Add unifroms and structs 2020-09-15 12:45:09 -04:00
bors[bot]
da81673f64 [rs] Merge #567
567: Notes on LoadOp r=kvark a=PENGUINLIONG

If the swapchain image was drawn with a pipeline that loads a render target that has not been cleared before, the validation layer gives a triplet of confusing feedbacks:

```log
[2020-09-15T06:42:23Z ERROR gfx_backend_vulkan] 
    VALIDATION [UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout (1303270965)] : Validation Error: [ UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout ] Object 0: handle = 0x1d80787bfe8, type = VK_OBJECT_TYPE_COMMAND_BUFFER; | MessageID = 0x4dae5635 | Submitted command buffer expects VkImage 0x6dc7200000000005[] (subresource: aspectMask 0x1 array layer 0, mip level 0) to be in layout VK_IMAGE_LAYOUT_PRESENT_SRC_KHR--instead, current layout is VK_IMAGE_LAYOUT_UNDEFINED.
    object info: (type: COMMAND_BUFFER, hndl: 2027350900712)

[2020-09-15T06:42:23Z ERROR gfx_backend_vulkan] 
    VALIDATION [UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout (1303270965)] : Validation Error: [ UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout ] Object 0: handle = 0x1d8078586a8, type = VK_OBJECT_TYPE_COMMAND_BUFFER; | MessageID = 0x4dae5635 | Submitted command buffer expects VkImage 0x3ba5830000000006[] (subresource: aspectMask 0x1 array layer 0, mip level 0) to be in layout VK_IMAGE_LAYOUT_PRESENT_SRC_KHR--instead, current layout is VK_IMAGE_LAYOUT_UNDEFINED.
    object info: (type: COMMAND_BUFFER, hndl: 2027350754984)

[2020-09-15T06:42:23Z ERROR gfx_backend_vulkan] 
    VALIDATION [UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout (1303270965)] : Validation Error: [ UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout ] Object 0: handle = 0x1d8078614f8, type = VK_OBJECT_TYPE_COMMAND_BUFFER; | MessageID = 0x4dae5635 | Submitted command buffer expects VkImage 0x4c5b620000000007[] (subresource: aspectMask 0x1 array layer 0, mip level 0) to be in layout VK_IMAGE_LAYOUT_PRESENT_SRC_KHR--instead, current layout is VK_IMAGE_LAYOUT_UNDEFINED.
    object info: (type: COMMAND_BUFFER, hndl: 2027350791416)
```

And it turns out they come from the triple-buffering swapchain images. It seems `wgpu` would only re-layout the swapchain image if it's been loaded by a clear op. I would be great to warn the users beforehand. (I know it's not something I should ever do tho)

Co-authored-by: PENGUINLIONG <admin@penguinliong.moe>
2020-09-15 13:32:59 +00:00
Dzmitry Malyshau
a561c7cacb validator: try resolving the types 2020-09-15 07:51:45 -04:00
Dzmitry Malyshau
d6cc17f051 Refactor feature names 2020-09-15 07:51:45 -04:00
Dzmitry Malyshau
e99c715160 glsl: use typifier in the backend 2020-09-15 07:51:45 -04:00
Dzmitry Malyshau
fb2c60b31c msl: use typifier in the backend 2020-09-15 07:51:45 -04:00
Dzmitry Malyshau
f04a07c86c proc: make typifier work with gaps in the type graph 2020-09-15 07:51:45 -04:00