/// A pool of free [`wgpu_hal::CommandEncoder`]s, owned by a `Device`. /// /// Each encoder in this list is in the "closed" state. /// /// Since a raw [`CommandEncoder`][ce] is itself a pool for allocating /// raw [`CommandBuffer`][cb]s, this is a pool of pools. /// /// [`wgpu_hal::CommandEncoder`]: hal::CommandEncoder /// [ce]: hal::CommandEncoder /// [cb]: hal::Api::CommandBuffer pub(crate) struct CommandAllocator {
free_encoders: Mutex<Vec<Box<dyn hal::DynCommandEncoder>>>,
}
/// Return a fresh [`wgpu_hal::CommandEncoder`] in the "closed" state. /// /// If we have free encoders in the pool, take one of those. Otherwise, /// create a new one on `device`. /// /// [`wgpu_hal::CommandEncoder`]: hal::CommandEncoder pub(crate) fn acquire_encoder(
&self,
device: &dyn hal::DynDevice,
queue: &dyn hal::DynQueue,
) -> Result<Box<dyn hal::DynCommandEncoder>, hal::DeviceError> { letmut free_encoders = self.free_encoders.lock(); match free_encoders.pop() {
Some(encoder) => Ok(encoder),
None => unsafe { let hal_desc = hal::CommandEncoderDescriptor { label: None, queue };
device.create_command_encoder(&hal_desc)
},
}
}
/// Add `encoder` back to the free pool. pub(crate) fn release_encoder(&self, encoder: Box<dyn hal::DynCommandEncoder>) { letmut free_encoders = self.free_encoders.lock();
free_encoders.push(encoder);
}
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-23)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.