Commit Graph

1077 Commits

Author SHA1 Message Date
teoxoy
595ae7cb47 [wgpu-hal] add null terminations to symbols to avoid reallocation 2024-09-03 17:15:19 +02:00
teoxoy
9d24888848 [d3d12] use windows-rs's bindings for DXC instead of hassle-rs 2024-09-03 17:15:19 +02:00
teoxoy
912bdcd336 [d3d12] simplify enumerate_adapters() fn
Also fixes an issue where only high performance adapters would be enumerated if DXGI 1.6 is available.
2024-09-03 17:15:19 +02:00
teoxoy
6c2f23c6a2 [d3d12] simplify create_factory() fn 2024-09-03 17:15:19 +02:00
teoxoy
dd01b6d209 [d3d12] make DxgiLib and D3D12Lib methods consistent 2024-09-03 17:15:19 +02:00
teoxoy
29e288f81c move hal_usage_error from the vk backend to lib.rs 2024-09-03 17:15:19 +02:00
teoxoy
e25051ec8f [d3d12] treat failure to populate references to resources as DeviceError::Unexpected
These are guaranteed to be populated if the creation methods didn't error. If they are not, the driver/runtime is at fault.
2024-09-03 17:15:19 +02:00
teoxoy
43f6279605 [d3d12] refactor buffer/texture creation functions to return resources instead of using out params 2024-09-03 17:15:19 +02:00
Erich Gubler
85346dfd20 chore: use std::mem::size_of{,_val} s'more
As before, this is to minimize diffs. with Rust 1.80.
2024-09-03 10:18:25 -04:00
Erich Gubler
e1c0aed520 chore(dx12): satisfy clippy::manual_bits 2024-09-03 10:18:25 -04:00
Erich Gubler
e323817425 chore: satisfy unused_qualifications _again_ 😩 2024-09-03 10:18:25 -04:00
Marijn Suijten
4454cbfaab
[wgpu-hal] #5956 windows-rs migration followups and cleanups (#6173)
PR #5956 wasn't fully complete and still had some outstanding minor
issues and cleanups to be done, as well as hidden semantic changes.
This addresses a bunch of them:

- Remove unnecessary `Error` mapping to `String` as `windows-rs`'s
  `Error` has a more complete `Display` representation by itself.
- Remove `into_result()` as every call could have formatted the
  `windows-rs` `Error` in a log call directly.
- Pass `None` instead of a pointer to an empty slice wherever possible
  (waiting for https://github.com/microsoft/win32metadata/pull/1971 to
  trickle down into `windows-rs`).
- Remove `.clone()` on COM objects (temporarily increasing the refcount)
  when it can be avoided by inverting the order of operations on `raw`
  variables.
2024-08-30 11:02:38 +02:00
Marijn Suijten
71b41c6638 [wgpu-hal] Make raw-gles runnable on X11 and Wayland platforms again
PR #6150 suffered a much larger rebase "hell" than I anticipated.  On
my Linux box I made this change, but lost it while force-pushing from
Windows (and created some other compiler errors while at it...).

By disabling all features on `glutin`/`glutin-winit` (the latter only
uses `x11`, and only forwards `wayland` to `glutin`) we may have dropped
a lot of "unused" dependencies for other GL backends, but also made the
crate unable to import X11 (Xlib/Xcb) and Wayland handles into EGL.

Also import the missing `glutin::context::Version` struct again which
was added last-minute to #6150 (to make sure my Intel card on Windows
creates a GLES 3.0+ instead of GLES 2.0 context) while the import was
accidentally squashed into #6152 (not merged yet).
2024-08-28 09:55:07 +02:00
Jan Procházka
5deaef3b67
Add VideoFrame to ExternalImageSource enum (#6170) 2024-08-27 18:05:45 +00:00
Marijn Suijten
690a3fb3fb
[wgpu-hal] Upgrade glutin to 0.31 (#6150)
* [wgpu-hal] Upgrade `glutin` to `0.31`

`glutin 0.30` onwards completely refactored its internals to no longer
be reliant on `winit`, as they (by default) have no direct relation
except needing to perform _some_ operations (platform-specific) at
strategic times in window creation and event loop handling.  Most of
that is handled by a new `glutin-winit` introp crate, while the core
`glutin` crate now exclusively focuses on wrapping the various OpenGL
context APIs (CGL, EGL, WGL, ...).

This does result in a little more verbose handling to get the right
`GLDisplay`, `GLConfig`, `GLContext` and `GLSurface`, but gives much
more control and makes all intricacies more explicit.  Most of the
code was copied from `glutin 0.31`'s example crate, with the code for
transparency support removed.

Note that the example doesn't at all handle event loop events properly:
resizes and redraws are not listened to, and mobile-specific surface
events (`Resumed` and `Suspended`) are equally ignored.

* [wgpu-hal] Implement proper `Surface` availability semantics in `raw-gles` example
2024-08-27 13:05:47 -04:00
Jerzy Wilczek
a9047c2af5
Change the DropGuard public API to a callback-based one. (#6164)
This patch also unifies the behavior of the the `DropGuard`-ish
constructs in the Vulkan-based implementation.
2024-08-27 16:44:34 +00:00
Imbris
fccd2981d0
Ensure glow::Context is current when dropped (#6114)
Cleanup code in glow needs the context to be current (mainly for debug
message callbacks).

See https://docs.rs/glow/0.14.0/glow/trait.HasContext.html#safety
2024-08-27 12:15:41 -04:00
Daniel McNab
685c2133f2
hal: cargo feature to allow using VK_GOOGLE_display_timing unsafely (#6149)
* Expose the raw swapchain from a vulkan `Surface`

* Allow setting the present timing information on hal Vulkan

* Fix clippy without the feature enabled

* CHANGELOG

* Revert inadvertently formatted Cargo.toml

* Move display timing to a feature

* Update the changelog

* Whitespace and doc wording tweaks

* Apply suggestions from code review

Co-authored-by: Marijn Suijten <marijns95@gmail.com>

* Revert inadvertent formatting changes again

* Remove unused qualification

Co-authored-by: Marijn Suijten <marijns95@gmail.com>

* Address review feedback

* Fix flow of sentence and follow intra-doc-link

* Add more docs to `set_next_present_time`, and rename

* Also rename `next_present_times`

* Apply suggestions from code review

Co-authored-by: Marijn Suijten <marijns95@gmail.com>

---------

Co-authored-by: Marijn Suijten <marijns95@gmail.com>
2024-08-27 11:25:04 -04:00
Erich Gubler
fac49ee97c chore: work around unused_qualifications from new prelude items in Rust 1.80
`std::mem::{size,align}_of{,_val}` was added to `std::prelude` in Rust
1.80; see
[`rust`#123168](https://github.com/rust-lang/rust/pull/123168/).
However, we don't have an MSRV at 1.80 or higher yet. So, let's work
around it by importing these items fully. Since neither `clippy` nor
`rustc` lint against shadowed `prelude` items yet (see also a [proposed
`clippy` lint] for such), that lets us remove the explicit `std::mem::*`
imports later at our leisure.

[proposed `clippy` lint]: https://github.com/rust-lang/rust-clippy/issues/8439
2024-08-23 16:20:34 -04:00
Valaphee The Meerkat
b4db97f97b
Add HTMLImageElement/ImageData as external source for copying images (#5668)
* Add `HTMLImageElement` as external source for copying images

* Typo
2024-08-20 12:54:24 -04:00
Marijn Suijten
a157c3cf4b
[wgpu-hal] Migrate d3d12 backend over to windows-rs (#5956)
* windows-rs 0.58

* Clean up suspicious committed allocation workaround

* dx12: Flatten suballocation module
2024-08-20 11:48:37 -04:00
Kornel
222f1ea733 Reduce code size of error handling 2024-08-19 14:38:20 +01:00
Erich Gubler
abc56417bb
refactor(web): satisfy unused_qualifications (#6121) 2024-08-15 16:56:12 +00:00
Erich Gubler
23e7846400 refactor(hal): satisfy trivial_casts 2024-08-15 14:14:13 +01:00
Erich Gubler
89a64e911d refactor(hal): remove unneeded trivial_casts suppr. 2024-08-15 14:14:13 +01:00
teoxoy
2c31414517 add an Unexpected variant to DeviceError 2024-08-15 13:56:05 +01:00
teoxoy
24134e049f handle all vulkan error variants for each function explicitly 2024-08-15 13:56:05 +01:00
teoxoy
e4c5b4760b introduce a new function that handles unexpected vulkan errors that can't be mapped to DeviceError::Lost 2024-08-15 13:56:05 +01:00
teoxoy
8b6450a9ce handle all variants of gpu_descriptor::AllocationError explicitly 2024-08-15 13:56:05 +01:00
teoxoy
7103520bd3 introduce a new function for hal usage errors 2024-08-15 13:56:05 +01:00
teoxoy
a0c107f7c8 remove handling of error that is not documented to be returned by vkAllocateMemory 2024-08-15 13:56:05 +01:00
Fionn Langhans
273c2c4b1a Fixed spelling mistake in URL of d3d12 2024-08-14 23:16:58 +02:00
Andreas Reich
3181251577 Core adapter no longer uses any generics 2024-08-14 17:34:11 +02:00
Andreas Reich
04cadfb369 Core's Surface, Instance and Adapter use now dynamic hal types 2024-08-14 17:34:11 +02:00
Andreas Reich
5b9198fd43 introduce DynInstance 2024-08-14 17:34:11 +02:00
Andreas Reich
6f01cbff06 introduce DynAdapter 2024-08-14 17:34:11 +02:00
Andreas Reich
99ffc129eb remove unnecessary debug constraints from Api (handled by Dyn traits) 2024-08-14 17:34:11 +02:00
Andreas Reich
27944debb1 DynCommandEncoder acceleration structure building 2024-08-14 17:34:11 +02:00
Andreas Reich
d87aa3635e DynCommandencoder end_encoding, reset_all 2024-08-14 17:34:11 +02:00
Andreas Reich
1a9170e57b DynDevice exit, counters, report 2024-08-14 17:34:11 +02:00
Andreas Reich
9e1f1487b4 DynDevice acceleration structure handling 2024-08-14 17:34:11 +02:00
Andreas Reich
522b98c582 DynDevice wait/capture/pipeline_cache_get_data 2024-08-14 17:34:11 +02:00
Andreas Reich
dbf9aea0ba DynDevice fence 2024-08-14 17:34:11 +02:00
Andreas Reich
84c4811f81 DynDevice create/destroy query set 2024-08-14 17:34:11 +02:00
Andreas Reich
4d355bf30e DynDevice pipeline cache 2024-08-14 17:34:11 +02:00
Andreas Reich
3932f8b854 DynDevice create/destroy compute/render pipeline 2024-08-14 17:34:11 +02:00
Andreas Reich
ad5c7fe50e DynDevice create/destroy ShaderModule 2024-08-14 17:34:11 +02:00
Andreas Reich
276753f963 DynDevice create/destroy bind group
bindgroup fixup
2024-08-14 17:34:11 +02:00
Andreas Reich
33f57e2305 DynDevice create/destroy pipeline layout 2024-08-14 17:34:11 +02:00
Andreas Reich
1da319f804 DynDevice create/destroy bind group layout 2024-08-14 17:34:11 +02:00