diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
commit | 2aa4a82499d4becd2284cdb482213d541b8804dd (patch) | |
tree | b80bf8bf13c3766139fbacc530efd0dd9d54394c /third_party/rust/d3d12/src/sync.rs | |
parent | Initial commit. (diff) | |
download | firefox-upstream.tar.xz firefox-upstream.zip |
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/rust/d3d12/src/sync.rs')
-rw-r--r-- | third_party/rust/d3d12/src/sync.rs | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/third_party/rust/d3d12/src/sync.rs b/third_party/rust/d3d12/src/sync.rs new file mode 100644 index 0000000000..75a4b26710 --- /dev/null +++ b/third_party/rust/d3d12/src/sync.rs @@ -0,0 +1,41 @@ +use com::WeakPtr;
+use std::ptr;
+use winapi::um::d3d12;
+use winapi::um::{synchapi, winnt};
+use HRESULT;
+
+#[derive(Copy, Clone)]
+#[repr(transparent)]
+pub struct Event(pub winnt::HANDLE);
+impl Event {
+ pub fn create(manual_reset: bool, initial_state: bool) -> Self {
+ Event(unsafe {
+ synchapi::CreateEventA(
+ ptr::null_mut(),
+ manual_reset as _,
+ initial_state as _,
+ ptr::null(),
+ )
+ })
+ }
+
+ // TODO: return value
+ pub fn wait(&self, timeout_ms: u32) -> u32 {
+ unsafe { synchapi::WaitForSingleObject(self.0, timeout_ms) }
+ }
+}
+
+pub type Fence = WeakPtr<d3d12::ID3D12Fence>;
+impl Fence {
+ pub fn set_event_on_completion(&self, event: Event, value: u64) -> HRESULT {
+ unsafe { self.SetEventOnCompletion(value, event.0) }
+ }
+
+ pub fn get_value(&self) -> u64 {
+ unsafe { self.GetCompletedValue() }
+ }
+
+ pub fn signal(&self, value: u64) -> HRESULT {
+ unsafe { self.Signal(value) }
+ }
+}
|