Commit graph

9 commits

Author SHA1 Message Date
Seungha Yang
c612af6d42 d3d12commandqueue: Always invoke notify asynchronously
Otherwise the callback thread is unpredictable

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6428>
2024-03-22 20:45:01 +09:00
Seungha Yang
0d559bead9 d3d12: Make primary fence sharable
Create primary fence with D3D12_FENCE_FLAG_SHARED flag so that
the fence can be shared with other APIs or processes

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6428>
2024-03-22 18:57:26 +09:00
Seungha Yang
a1c8fc6163 d3d12device: Keep device object permanently
Because ID3D12Device objects are singletons per adapter,
GstD3D12Device was following the API design, that is, keep track
of global GstD3D12Device objects and reuses it.
That means ID3D12Device object can be released at the time
when GstD3D12Device is destroyed.

But exetrnal APIs such as NVENC does not seem to be happy
with the released ID3D12Device, that could be a driver bug though.

Let's hold already opened ID3D12Device permanently without releasing
it for now.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6395>
2024-03-19 12:03:55 +00:00
Seungha Yang
17d6c7350c d3d12commandqueue: Add drain method
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6395>
2024-03-19 12:03:55 +00:00
Seungha Yang
393fb4733c d3d12: Use native device handle if possible
Various abstraction objects such as command queue/list/allocator
can be constructed without GstD3D12Device

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6395>
2024-03-19 12:03:55 +00:00
Seungha Yang
331522210f d3d12commandqueue: Allow empty command list
Just increase fence value and signal the queue in that case

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6395>
2024-03-19 12:03:54 +00:00
Seungha Yang
35e5178f0e d3d12: Fix potential self thread join
Fence data could hold GstD3D12Device directly or indirectly.
Then if it's holding last refcount, the device object will
be released from the device object's internal thread,
and will try join self thread.
Delegates it to other global background thread to avoid
self thread joining.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6042>
2024-02-05 01:37:32 +09:00
Seungha Yang
48cfca413d d3d12: Add header containing core features
... and include the single header instead of listing many ones

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5870>
2023-12-29 14:39:00 +00:00
Seungha Yang
efc023e76e d3d12: Rework command scheduling
* Use single fence object per queue and remove GstD3D12Fence
  implementation
* Add a helper method for texture copy
* Run background thread and release unused resource from the thread

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5870>
2023-12-29 14:38:59 +00:00