teoxoy
91924fb603
[wgpu-core] make implicit_pipeline_ids
arg optional for users that don't provide IDs
2024-07-17 16:57:01 +02:00
Teodor Tanasoaia
7e112ca4c0
[wgpu-core] fix length of copy in queue_write_texture
( #5973 )
...
The size of the given `data` might be less than the size of the staging buffer.
This issue became apparent with the refactor in 6f16ea460a
(https://github.com/gfx-rs/wgpu/pull/5946 ) since there is now an assert in `StagingBuffer.write()`.
Ruffle ran into this in https://github.com/gfx-rs/wgpu/issues/3193#issuecomment-2231209711 .
2024-07-17 10:33:48 -04:00
Jim Blandy
d02e2949b2
[core] Correctly check mipmap-filtering samplers against the layout.
...
Ensure that samplers using non-`Nearest` mipmap filtering are
considered "filtering samplers" when deciding bind group layout
compatibility.
Add tests for layout `NonFiltering` validation.
Fixes #5948 .
2024-07-15 10:03:49 +02:00
Jim Blandy
05c0656fa4
[core] Correct docs for LifetimeTracker
and its mapped
field.
2024-07-15 09:59:04 +02:00
Andreas Reich
d3edbc57a9
Compute pass benchmark ( #5767 )
...
Adds a benchmark for compute pass recording, very similar to what we have for render passes.
2024-07-14 22:13:50 +02:00
teoxoy
6f16ea460a
make the StagingBuffer
implementation more robust
2024-07-12 16:33:57 +02:00
teoxoy
347d902bcb
introduce FlushedStagingBuffer
2024-07-12 16:33:57 +02:00
teoxoy
2f282cdd06
remove instance_flags
arg from StagingBuffer::new
2024-07-12 16:33:57 +02:00
teoxoy
26f65ddffd
[wgpu-hal] remove return type from Device.unmap_buffer()
...
It's already documented that to unmap a buffer it has to have been mapped.
Vulkan was the only backend that was returning an OOM on missing `Buffer.block` but `Buffer.map_buffer` already returns an error in this case.
2024-07-12 16:33:57 +02:00
teoxoy
5e2df1406d
use StagingBuffer.flush()
in Buffer.unmap_inner()
...
We should have always unmapped the staging buffer as we are using it on the GPU after this point.
2024-07-12 16:33:57 +02:00
teoxoy
9a7f44bf09
make StagingBuffer
creation a method
2024-07-12 16:33:57 +02:00
teoxoy
a8b0f2f6a6
remove device arg from StagingBuffer.flush()
2024-07-12 16:33:57 +02:00
teoxoy
4d285d8b61
remove the Mutex
around StagingBuffer
's internal buffer
2024-07-12 16:33:57 +02:00
teoxoy
a0c185a28c
[wgpu-core] fix trying to create 0 sized staging buffers when creating mapped_at_creation buffers
...
This issue was introduced by fabbca294a
.
2024-07-11 14:10:22 +02:00
Bruce Mitchener
750f72af8d
wgc: Use explicit feature for raw-window-handle
...
This helps to prepare for the coming day when explicit features
will be required.
2024-07-11 12:38:49 +02:00
Bruce Mitchener
8fd08ac638
Use derive
feature on serde
rather than serde_derive
...
The current code works, but `serde` documents that the feature to
use is `derive` (which then happens to use the `serde_derive`
implicit feature).
2024-07-11 11:58:20 +02:00
Bruce Mitchener
ee16de1c63
clippy: Fix doc_lazy_continuation
lints ( #5935 )
...
These are in nightly builds.
2024-07-11 08:44:43 +02:00
teoxoy
ef0ce05d3a
[wgpu-core] fix .zip()
usages
2024-07-10 16:42:35 +02:00
teoxoy
b68966eea5
[wgpu-core] use the view's format not the texture's format
...
This fixes a regression introduced in 0a76c0fa84
.
2024-07-10 15:23:31 +02:00
teoxoy
425526828f
introduce DeviceTextureTracker
which holds weak references to textures
2024-07-09 10:48:52 +02:00
teoxoy
aa9cb71a54
introduce DeviceBufferTracker
which holds weak references to buffers
2024-07-09 10:48:52 +02:00
teoxoy
f5a4489fd9
don't call drain_transitions()
of we drop the results
2024-07-09 10:48:52 +02:00
teoxoy
ac88c738c0
remove unused BufferTracker.get()
2024-07-09 10:48:52 +02:00
teoxoy
152a7e7dd0
remove unnecessary PhantomData
2024-07-09 10:48:52 +02:00
teoxoy
a270577dc4
make resource metadata generic over a T: Clone
2024-07-09 10:48:52 +02:00
teoxoy
0e1c1f7c07
replace the tracker in Device
with a new DeviceTracker
2024-07-09 10:48:52 +02:00
teoxoy
3142e15907
remove the triage suspected machinery
2024-07-09 10:48:52 +02:00
teoxoy
3fba403060
don't check if the buffer is still "present" from the user's perspective in LifetimeTracker.handle_mapping
...
This change doesn't change behavior as `Global.buffer_drop` already unmaps the buffer.
2024-07-09 10:48:52 +02:00
teoxoy
3cc6c2743a
remove LifetimeTracker.future_suspected_{buffers,textures}
2024-07-09 10:48:52 +02:00
teoxoy
61739d9583
remove PendingWrites.executing_command_buffers
...
The Vec only ever contained 0 or 1 command buffers.
We now acquire an encoder on every submit for pending writes but that's not a problem since those are coming from a pool anyway.
2024-07-09 10:48:52 +02:00
teoxoy
439e28bfc1
move trackers into EncoderInFlight
on submit
2024-07-09 10:48:52 +02:00
teoxoy
140495006e
remove device_maintain_ids
2024-07-09 10:48:52 +02:00
teoxoy
c6761bdd7a
add ActiveSubmission.temp_resources
that contains all temporary resources.
...
It's worth noting that `suspected_resources` never contained those resources.
2024-07-09 10:48:52 +02:00
teoxoy
7223bfa88d
remove Arc
s around TempResource
variants
2024-07-09 10:48:52 +02:00
teoxoy
ef909d0a82
remove Device.create_buffer_impl
2024-07-09 10:48:52 +02:00
teoxoy
ab88dce759
remove unused TempResource::Buffer
2024-07-09 10:48:52 +02:00
teoxoy
fabbca294a
use StagingBuffer
instead of Buffer
for mapped_at_creation
Buffers
2024-07-09 10:48:52 +02:00
teoxoy
5266bd1f08
change prepare_staging_buffer
to return a non null u8 pointer
2024-07-09 10:48:52 +02:00
teoxoy
bd2b284a26
remove unused TempResource::Texture
2024-07-09 10:48:52 +02:00
Nicolas Silva
4c6318c0d2
Expose gpu allocation configuration options ( #5875 )
...
* Expose gpu allocation configuration options
This commit adds hints to control memory allocations strategies to the configuration options. These hints allow for automatic profiles such as optimizing for performance (the default, makes sense for a game), optimizing for memory usage (typically more useful for a web browser or UI library) and specifying settings manually.
The details of gpu allocation are still in flux. The goal is to switch vulkan and metal to gpu_allocator which is currently used with d3d12. gpu_allocator will also likely receive more configuration options, in particular the ability to start with smaller memory block sizes and progressively grow the block size. So the manual settings already provision for this upcoming option. Another approach could be to wait and add the manual option after the dust settles.
The reason for providing presets and defining values in the backends is that I am convinced that optimal fonigurations should take hardware capabilities into consideration. It's a deep rabbithole, though, so that will be an exercise for later.
* changelog
* Update CHANGELOG.md
Co-authored-by: Andreas Reich <r_andreas2@web.de>
* Add a comment about not entirely knowing what we are doing
---------
Co-authored-by: Andreas Reich <r_andreas2@web.de>
2024-07-08 14:49:44 +02:00
Erich Gubler
d41b9ab29f
refactor: use built-in {integer}::power_of_two
methods ( #5909 )
2024-07-04 23:34:19 -04:00
teoxoy
7910fd8059
[wgpu-hal] require a Surface
to be passed to Instance.enumerate_adapters()
on WebGL2
...
Also makes wgpu's `enumerate_adapters()` native only.
2024-07-04 10:17:07 +02:00
Imbris
3a6814770a
Allow unconsumed inputs in fragment shaders ( #5531 )
...
* Allow unconsumed inputs in fragment shaders by removing them from vertex
outputs when generating HLSL.
Fixes https://github.com/gfx-rs/wgpu/issues/3748
* Add naga:🔙 :hlsl::FragmentEntryPoint for providing information
about the fragment entry point when generating vertex entry points via
naga:🔙 :hlsl::Writer::write. Vertex outputs not consumed by the
fragment entry point are omitted in the final output struct.
* Add naga snapshot test for this new feature,
* Remove Features::SHADER_UNUSED_VERTEX_OUTPUT,
StageError::InputNotConsumed, and associated validation logic.
* Make wgpu dx12 backend pass fragment shader info when generating
vertex HLSL.
* Add wgpu regression test for allowing unconsumed inputs.
* Address review
* Add note that nesting structs for the inter-stage interface can't
happen.
* Remove new TODO notes (some addressed and some transferred to an issue
https://github.com/gfx-rs/wgpu/issues/5577 )
* Changed issue that regression test refers to 3748 -> 5553
* Add debug_assert that binding.is_some() in hlsl writer
* Fix typos caught in CI
Also, fix compiling snapshot test when hlsl-out feature is not enabled.
2024-07-04 09:08:46 +02:00
teoxoy
e26d2d7763
move command buffer resolving in Global
's methods
2024-07-03 15:01:41 +02:00
teoxoy
a9c74f42d6
use Surface.get_capabilities
in all relevant places
2024-07-03 15:01:41 +02:00
teoxoy
ef7d27233e
use a read
guard instead of write
2024-07-03 15:01:41 +02:00
teoxoy
eb0eb342cf
unregister adapters like all other resources
2024-07-03 15:01:41 +02:00
teoxoy
5b2e78da45
cleanup adapter usages within the Device
2024-07-03 15:01:41 +02:00
teoxoy
4f6223534f
take guard to render bundles at the top of resolve_render_command_ids
2024-07-03 15:01:41 +02:00
teoxoy
addd80ccd3
replace Registry.read().get_owned()
with Registry.get()
2024-07-03 15:01:41 +02:00
teoxoy
3df4c8a502
remove unused std::ops::Index
impl for Storage
2024-07-03 15:01:41 +02:00
teoxoy
9308e15048
use Storage.get_owned
in cases where we used to later clone the resource anyway
2024-07-03 15:01:41 +02:00
teoxoy
249c8023ff
simplify State.set_bind_group
2024-07-03 15:01:41 +02:00
teoxoy
dbcb273188
remove StatelessTracker.add_single
2024-07-03 15:01:41 +02:00
teoxoy
39a268c624
remove FutureId.assign_existing
2024-07-03 15:01:41 +02:00
teoxoy
cd9f003477
move Device.set_queue
call in create_device_and_queue_from_hal
2024-07-03 15:01:41 +02:00
teoxoy
96255d484f
change FutureId.assign
to not return a clone of the resource passed to it
2024-07-03 15:01:41 +02:00
teoxoy
7f3e1bba14
move code after calls to FutureId.assign
inside Device
fns
2024-07-03 15:01:41 +02:00
teoxoy
40022c1584
remove duplicate check, it's already present in Device.create_texture_view
2024-07-03 15:01:41 +02:00
teoxoy
dc55cb436c
add Texture::new
fn
2024-07-03 15:01:41 +02:00
teoxoy
53c79bdf7a
move buffer creation logic in a new Device
method
2024-07-03 15:01:41 +02:00
teoxoy
029168f14a
remove no-op, calling schedule_resource_destruction
with last_submit_index: !0
does nothing
2024-07-03 15:01:41 +02:00
teoxoy
a971e7f7d4
remove duplicate check, it's already present in Device.create_buffer
2024-07-03 15:01:41 +02:00
teoxoy
7b387007a8
make Device.create_buffer
return an Arc<Buffer>
2024-07-03 15:01:41 +02:00
teoxoy
b8c5b2275e
don't clone resources for ResourceMetadataProvider::Direct
2024-07-03 15:01:41 +02:00
teoxoy
69b44c6a32
gate fns behind either serde
or replay
since Firefox needs those
2024-07-02 18:06:19 +02:00
teoxoy
b61be30e53
move out ID to resource mapping code from Device.create_bind_group
2024-07-02 18:06:19 +02:00
teoxoy
1be51946e3
move out ID to resource mapping code from pipeline creation methods
2024-07-02 18:06:19 +02:00
teoxoy
d8b0b5975d
assign resources/errors in the Global
's pipeline creation functions
2024-07-02 18:06:19 +02:00
teoxoy
79b15b8de8
move out ID to BGL mapping from Device.create_pipeline_layout()
2024-07-02 18:06:19 +02:00
teoxoy
1f6ac35e83
change Storage.force_replace
to take an Arc<T>
2024-07-02 18:06:19 +02:00
teoxoy
896418c740
Panic on non-existent entry in Storage.get
, this is consistent with Element::Vacant
2024-07-02 18:06:19 +02:00
teoxoy
16c7d84d63
remove Registry.try_get()
2024-07-02 18:06:19 +02:00
teoxoy
b904e2c759
use Registry.get()
for device_set_device_lost_closure
2024-07-02 18:06:19 +02:00
teoxoy
c4d71d9af5
use Registry.get()
instead of Registry.read().get_owned()
2024-07-02 18:06:19 +02:00
teoxoy
3547138716
remove PrettyError
2024-07-02 18:06:19 +02:00
teoxoy
08b8e96c40
move ContextError
's fmt logic in its Display impl
2024-07-02 18:06:19 +02:00
teoxoy
df7a6defa8
don't print the scope twice
...
The scope is already printed by the Display impl of those errors.
2024-07-02 18:06:19 +02:00
teoxoy
ed1e8ecf4b
remove label getters from Global
...
Also removes label from `Element::Error` and slightly refactors ContextError.
2024-07-02 18:06:19 +02:00
teoxoy
9d3d4ee297
implement exclusive pipeline validation
...
This gets the bind_group_layout_dedup test passing again.
2024-07-02 18:06:19 +02:00
teoxoy
4a19ac279c
introduce MultiError
and use it for BGL incompatibility errors
2024-07-02 18:06:19 +02:00
teoxoy
42e16c7e7d
simplify logic of Entry.is_valid
2024-07-02 18:06:19 +02:00
teoxoy
0d539874ed
simplify the BGL compatibility check
2024-07-02 18:06:19 +02:00
teoxoy
9ec0f45efd
move the BGL compatibility check in the binder
2024-07-02 18:06:19 +02:00
teoxoy
ca0027d12b
use ResourceErrorIdent
in a few buffer error variants
2024-07-02 18:06:19 +02:00
teoxoy
2fe761f7e3
remove MissingCopySrcUsageFlag
error variant
2024-07-02 18:06:19 +02:00
teoxoy
1841857fea
use .check_usage()
for QUERY_RESOLVE
2024-07-02 18:06:19 +02:00
teoxoy
4df5474c9c
remove MissingCopyDstUsageFlag
error variants
2024-07-02 18:06:19 +02:00
teoxoy
a4bb5dff2b
rename error variants that contain IDs
2024-07-02 18:06:19 +02:00
teoxoy
6fe041d544
make Queue.device
non-optional
2024-07-02 18:06:19 +02:00
teoxoy
f34f7eb658
impl ParentDevice
via macro
2024-07-02 18:06:19 +02:00
teoxoy
c3ebfde302
remove Resource
trait
2024-07-02 18:06:19 +02:00
teoxoy
c63f0a02f2
introduce Trackable
trait
2024-07-02 18:06:19 +02:00
teoxoy
ae7da8f669
introduce Labeled
trait
2024-07-02 18:06:19 +02:00
teoxoy
985968fd38
remove unused Resource
bound
2024-07-02 18:06:19 +02:00
teoxoy
727956fcde
introduce StorageItem
trait
2024-07-02 18:06:19 +02:00
teoxoy
90f7377cc9
introduce ResourceType
trait
2024-07-02 18:06:19 +02:00
teoxoy
a422d1cba2
remove ResourceInfo.id
2024-07-02 18:06:19 +02:00
teoxoy
66777cc80d
remove PassErrorScope::PassEncoder
and id arg of PassErrorScope::Pass
2024-07-02 18:06:19 +02:00
teoxoy
d26aef554e
use .error_ident()
for log::trace!
in render_pass_end
2024-07-02 18:06:19 +02:00