Commit Graph

472 Commits

Author SHA1 Message Date
bors[bot]
dbef9f397e Merge #236
236: Re-export Pod from gfx-hal r=kvark a=paulkernfeld

This way, Pod can be used as a trait bound in wgpu-rs

Co-authored-by: Paul Kernfeld <paulkernfeld@gmail.com>
2019-06-23 23:25:34 +00:00
Paul Kernfeld
ccc0e65b03 Re-export Pod from gfx-hal
This way, Pod can be used as a trait bound in wgpu-rs
2019-06-23 19:10:03 -04:00
bors[bot]
f8df8d4032 Merge #235
235: Full MSAA handling r=kvark a=rukai

These changes fix the msaa-line wgpu example, along with a PR to wgpu-native https://github.com/gfx-rs/wgpu-rs/pull/28

Concerns:
*   webgpu does not expose a way for users to query limits, how are they supposed to choose a suitable sample_count?
*   I think `attachment_unused` should be moved into gfx-hal. Where abouts?
*   Is a sample mask of `:u64 = !0` suitable?

Co-authored-by: Rukai <rubickent@gmail.com>
2019-06-23 21:31:20 +00:00
Rukai
194943c12c Full MSAA handling 2019-06-23 22:17:42 +10:00
bors[bot]
c8deae32bd Merge #230
230: Implement sample_count field r=kvark a=rukai

I'm trying to get MSAA working for brawllib renderer.

This PR allows for more ways to hit validation errors.
Giving a valid but mismatching sample count results in these validation errors.
```
ERROR gfx_backend_vulkan 
VALIDATION [VUID-vkCmdCopyImageToBuffer-srcImage-00188 (0)] : vkCmdCopyImageToBuffer(): srcImage for image 0xe030 was created with a sample count of VK_SAMPLE_COUNT_4_BIT but must be VK_SAMPLE_COUNT_1_BIT. The Vulkan spec states: srcImage must have a sample count equal to VK_SAMPLE_COUNT_1_BIT (https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VUID-vkCmdCopyImageToBuffer-srcImage-00188)
object info: (type: IMAGE, hndl: 57392)

ERROR gfx_backend_vulkan 
VALIDATION [UNASSIGNED-CoreValidation-DrawState-NumSamplesMismatch (0)] : Num samples mismatch! At draw-time in Pipeline (0x7) with 1 samples while current RenderPass (0xe) w/ 4 samples!
object info: (type: PIPELINE, hndl: 7)

ERROR gfx_backend_vulkan 
VALIDATION [VUID-vkCmdDrawIndexed-renderPass-02684 (0)] : vkCmdDrawIndexed(): RenderPasses incompatible between active render pass w/ renderPass 0xe and pipeline state object w/ renderPass 0x6 Attachment 0 is not compatible with 0: They have different samples.. The Vulkan spec states: The current render pass must be compatible with the renderPass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS. (https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VUID-vkCmdDrawIndexed-renderPass-02684)
object info: (type: RENDER_PASS, hndl: 14)
```

Co-authored-by: Rukai <rubickent@gmail.com>
2019-06-18 05:44:45 +00:00
Rukai
45923755ba Implement sample_count field 2019-06-18 11:55:03 +10:00
bors[bot]
9705ceb2e7 Merge #224
224: Fix descriptor sets free validation error r=kvark a=rukai

Seeing as kvark believes this change to be correct I've opened this PR.
Still doesnt fix https://github.com/gfx-rs/wgpu/issues/221 though

Co-authored-by: Rukai <rubickent@gmail.com>
2019-06-17 13:45:22 +00:00
Rukai
15488dfa1e Fix descriptor sets free validation error 2019-06-17 21:01:56 +10:00
bors[bot]
a667d50d01 Merge #226
226: Tracking Rewrite r=grovesNL a=kvark

Fixes #44

The idea is to support independent tracking of sub-resources. Today, this is needed for textures, which can have individual layers and mipmap levels in different states at a time. Tomorrow, this will be needed for buffer sub-ranges.

The intent to hack it in grew into a complete rewrite of the tracker... The new approach is cleaner in a few places (e.g. `TrackPermit` is gone), but the implementation is obviously more complex. I tried to separate the levels from each other (see `ResourceState` and `RangedStates`) to fight complexity, but it requires a whole lot of testing infrastructure to be solid.

Also regresses #216 a bit, cc @arashikou : tracker is a relatively complex structure. I somehow doubt it's useful to look at it in debug spew. We may need to implement `Debug` manually for it before re-adding `Debug` derives on passes and command buffers.

TODO:
  - [x] documentation of tracking types
  - [x] unit tests for tracking logic
  - [x] actual testing with existing apps, ensure no regressions
  - [x] write a mipmap generation example

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2019-06-16 14:53:26 +00:00
Dzmitry Malyshau
3753309b65 Last comments and renames in the tracking module, according to the review 2019-06-16 07:25:30 -07:00
bors[bot]
6b655f52be Merge #229
229: Update rendy to 0.3 r=kvark a=rukai



Co-authored-by: Rukai <rubickent@gmail.com>
2019-06-16 14:18:40 +00:00
Rukai
21950386cb Update rendy to 0.3 2019-06-16 12:31:07 +10:00
Dzmitry Malyshau
57494d6394 Crucial fix to merge-replace semantics - always use the last destination state 2019-06-14 14:05:27 -04:00
Dzmitry Malyshau
917154a49d Debug tracking derives and regular optimization 2019-06-14 14:05:27 -04:00
Dzmitry Malyshau
c22d8f86cc Support depth-stencil texture transfers 2019-06-14 11:47:42 -04:00
Dzmitry Malyshau
3ed1215d2f Rewrite texture tracker to support multiple depth/stencil mips 2019-06-14 11:44:51 -04:00
Dzmitry Malyshau
3da6c9f65b Fix texture view extent, improve docs according to the review 2019-06-14 10:20:13 -04:00
Dzmitry Malyshau
7c647a7d3c Improve texture state merging 2019-06-14 10:20:13 -04:00
Dzmitry Malyshau
ef1c373887 Fix texture transfer aspects 2019-06-13 15:37:30 -04:00
Dzmitry Malyshau
965750b237 Improve texture state merging with proper error handling 2019-06-13 13:06:31 -04:00
Dzmitry Malyshau
86521abfc2 Document the tracking and adjust the API a bit to return less errors 2019-06-13 12:31:36 -04:00
Dzmitry Malyshau
e0f315801a Texture query() unit tests 2019-06-13 11:47:42 -04:00
Dzmitry Malyshau
0fb71c9fd8 Move texture tracking into a module 2019-06-13 11:30:47 -04:00
Dzmitry Malyshau
aca3f1e64d Fix compile warnings when no features are selected 2019-06-13 11:26:44 -04:00
Dzmitry Malyshau
745bebcbb5 Move buffer state tracking into a module, add unit tests 2019-06-13 11:22:54 -04:00
Dzmitry Malyshau
07ef7caddc Range merging unit tests 2019-06-13 11:08:53 -04:00
Dzmitry Malyshau
331fe55948 Check track isolation results for sanity 2019-06-13 10:20:21 -04:00
Dzmitry Malyshau
7b843f220f Move track logic into a module, fix isolate() first split 2019-06-13 10:15:24 -04:00
Dzmitry Malyshau
0e20549235 RangedState unit tests 2019-06-13 08:43:19 -04:00
Dzmitry Malyshau
30955e565c Phantom tracking state 2019-06-13 08:18:56 -04:00
Dzmitry Malyshau
d92b623bd8 Remove the old tracking code, update local feature and the headers 2019-06-12 12:29:28 -04:00
Dzmitry Malyshau
bc7b842f12 Moving the code to use the new tracker API 2019-06-12 12:27:53 -04:00
Dzmitry Malyshau
2446190a0b Finished first implementation of layer tracking 2019-06-12 12:22:58 -04:00
Dzmitry Malyshau
444220c6eb Another iteration of internal tracking 2019-06-12 12:22:19 -04:00
Dzmitry Malyshau
0dcd0c449d Parametrize Tracker by a state of a resource, add new plane tracker 2019-06-12 12:20:23 -04:00
Dzmitry Malyshau
2d5e67d6d5 Basic data structure to track mip levels and layers of a texture 2019-06-12 12:15:51 -04:00
bors[bot]
d69955b612 Merge #220
220: Free descriptor sets r=kvark a=rukai

Tested on https://github.com/rukai/brawllib_rs, wgpu examples and wgpu-rs examples.
Closes: https://github.com/gfx-rs/wgpu/issues/217

My approach was to just implement descriptor set tracking the same way textures and buffers are implemented.

Co-authored-by: Rukai <rubickent@gmail.com>
2019-06-10 17:01:45 +00:00
Rukai
59388e329f Free descriptor sets 2019-06-10 16:02:46 +10:00
bors[bot]
1fe4a9b320 Merge #216
216: Add Naïve Debug Derives Where Possible r=kvark a=arashikou

This adds `#[derive(Debug)]` to all public structs and enums possible. This also required adding it to some private types that they transitively depend on. However, the following types depend on types from external crates that do not implement Debug:

* `device::Device`
* `hub::Hub`
* `swap_chain::Surface`
* `swap_chain::SwapChain`

To support these types, we would need to use either custom `Debug` impls or something like [Derivative](https://mcarton.github.io/rust-derivative/).

This helps improve the situation in #76.

Co-authored-by: John W. Bruce <arashikou@gmail.com>
2019-06-07 23:03:30 +00:00
John W. Bruce
057719fdf5 Add Naïve Debug Derives Where Possible
This adds #[derive(Debug)] to all public structs and enums possible.
This also required adding it to some private types that they
transitively depend on. However, the following types depend on types
from external crates that do not implement Debug:

* device::Device
* hub::Hub
* swap_chain::Surface
* swap_chain::SwapChain

To support these types, we would need to use either custom Debug impls
or something like Derivative.

This helps improve the situation in #76.
2019-06-07 14:19:05 -07:00
bors[bot]
8cc50253c4 Merge #213
213: Use wider type for swapchain image epoch r=kvark a=grovesNL

Fixes #209

I don't think we need to do anything else here because it seems to only be used internally, so this should be a simple change.

Also ensures cbindgen is installed when targeting nightly on CI. It looks like it happened to be available on some Travis environments already so I missed this in #169

Co-authored-by: Joshua Groves <josh@joshgroves.com>
2019-06-05 13:27:48 +00:00
Joshua Groves
9decf27f4f Ensure cbindgen is available 2019-06-05 09:20:59 -02:30
Joshua Groves
9e60499738 Use wider type for swapchain image epoch 2019-06-05 00:15:12 -02:30
bors[bot]
b1d9de0406 Merge #169
169: Add Windows/glfw3 to CI r=kvark a=grovesNL



Co-authored-by: Joshua Groves <josh@joshgroves.com>
2019-06-05 01:55:24 +00:00
Joshua Groves
7e7a88b831 Add Windows/glfw3 to CI 2019-06-04 22:09:58 -02:30
bors[bot]
85740873d0 Merge #212
212: More consistent descriptor passing r=kvark a=porky11

also use pointer for descriptor in `wgpu_command_encoder_begin_render_pass` for consistency reasons

Co-authored-by: Fabio Krapohl <fabio.u.krapohl@fau.de>
2019-06-04 20:20:10 +00:00
Fabio Krapohl
8abc1c2668 also use pointer for descriptor in wgpu_command_encoder_begin_render_pass for consistency reasons 2019-06-04 22:13:48 +00:00
bors[bot]
952a9f5b60 Merge #211
211: More consistent naming of pointer-size-pairs r=kvark a=porky11

* always plural form without _ptr suffix for pointers
* always same name as pointer for size, but with _length suffix
* special case: single size applies to multiple pointers => only use length as name

Co-authored-by: Fabio Krapohl <fabio.u.krapohl@fau.de>
2019-06-04 19:47:30 +00:00
Fabio Krapohl
488367ce30 More consistent naming of pointer-size-pairs:
* always plural form without _ptr suffix for pointers
* always same name as pointer for size, but with _length suffix
* special case: single size applies to multiple pointers => only use length as name
2019-06-04 21:41:39 +00:00
bors[bot]
0642509deb Merge #208
208: Ensure wait_for_fences is never called on 0 fences r=kvark a=rukai

I don't see any reason why self.active should never be empty.

This fixes the validation errors but not the slowdown of https://github.com/gfx-rs/wgpu/issues/207
I presume the slowdown was causing self.active to clear.

Co-authored-by: Rukai <rubickent@gmail.com>
2019-06-03 16:13:56 +00:00