Seungha Yang
1b86c9d370
d3d12decoder: Try zero-copy in case of reverse playback too
...
In case of tier 1 decoder, always use reference-only picture to avoid
fixed-size pool limitation and output decoded picture without
copy even for negative rate. Also do not use copy queue for GPU to GPU
copy. Copy queue is specialized for upload/download and may occupy
PCIE bandwidth. Use direct queue as recommended by vendors.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5877 >
2024-01-03 02:08:53 +09:00
Seungha Yang
1fb44b8160
d3d12decoder: Fix crash on flush
...
On flush event, baseclass will discard all pictures from DPB
but there can be still in-flight commands not finished yet.
Use our command queue, allocator and fence data helper objects
to keep resource available during command execution.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5877 >
2024-01-03 01:36:42 +09:00
Seungha Yang
d3b3a1c00a
d3d12: Add {set,get}_user_data() methods to command allocator
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5877 >
2024-01-03 01:19:39 +09:00
Seungha Yang
9d5277e70e
d3d12decoder: Fix barrier usage
...
Common state promotion and decay does not seem to be applied to
decoder commands. Use barriers explicitly
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5877 >
2024-01-03 01:17:32 +09:00
Seungha Yang
087e39564d
d3d12videosink: Fix buffer leak
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5875 >
2024-01-02 13:02:47 +00:00
Seungha Yang
b0ef890726
d3d12device: Store adapter index
...
... and remove unused fence object
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5875 >
2024-01-02 13:02:47 +00:00
Seungha Yang
0577d1c9de
d3d12: Reduce shader visible descriptor size
...
Shader visible descriptors occupy GPU resource and there are hardware
limits. Thus, in order to minimize the amount of shader visible heaps,
only non shader visible descriptor heap (staging) will be held by d3d12memory.
Then converter will copy the staging descriptor to shader visible
descriptor heap per draw.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5875 >
2024-01-02 13:02:47 +00:00
Seungha Yang
0ce6e752e4
d3d12: Use CREATE_NOT_ZEROED heap flag if possible
...
Zero initialization would have overhead and it's not required
most cases except for textures. Use CREATE_NOT_ZEROED flag
in case of buffer resource or if a texture will be rendered without any
prior read operation.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5875 >
2024-01-02 13:02:47 +00:00
Seungha Yang
a1ba38cd64
d3d12: Add compositor element
...
Adding d3d12compositor element. d3d12compositor will build GPU commands
asynchronously and each command is serialized at final render stage.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5875 >
2024-01-02 13:02:47 +00:00
Seungha Yang
996346f8d3
d3d12converter: Don't map output buffer with write flag
...
Conversion will happen when constructed command list is executed,
not by converter element. Thus this object should not map output buffer
with write flag which will result in error if multiple threads
are building commands for the same output target frame.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5875 >
2024-01-02 13:02:47 +00:00
Seungha Yang
bffbf0d951
d3d12converter: Add support for texture upload
...
If buffer is not a d3d12 memory or allocated by other device,
upload to internal d3d12 memory
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5875 >
2024-01-02 13:02:47 +00:00
Seungha Yang
f4fe17d8d2
d3d12converter: Add support for blending
...
Create new PSO if blend state update is required
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5875 >
2024-01-02 13:02:47 +00:00
Seungha Yang
7c701058ed
d3d12: Add testsrc element
...
Adding testsrc element with d2d interop support via d3d11on12
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5875 >
2024-01-02 13:02:46 +00:00
Seungha Yang
2f091e7118
d3d12: Add video sink element
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5870 >
2023-12-29 14:39:00 +00:00
Seungha Yang
660f2d7d27
d3d12: Add convert element
...
Implement converter object with convert element
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5870 >
2023-12-29 14:39:00 +00:00
Seungha Yang
4198bd6932
d3d12: Add helper object for fence operation
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5870 >
2023-12-29 14:39:00 +00:00
Seungha Yang
eeb57061d2
d3d12: Enable plugin only for Windows8 or newer
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5870 >
2023-12-29 14:39:00 +00:00
Seungha Yang
3e49d6a75f
d3d12: Define more formats
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5870 >
2023-12-29 14:39:00 +00: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
41d8a12649
d3d12: Remove unused methods
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5870 >
2023-12-29 14:39:00 +00:00
Seungha Yang
5ce2a7f64f
d3d12bufferpool: Don't pre-allocate memory for size calculation
...
Unlike d3d11, we can know CPU accessible memory layout without
allocation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5870 >
2023-12-29 14:39:00 +00:00
Seungha Yang
d316356bf2
d3d12memory: Add alloc_wrapped() method
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5870 >
2023-12-29 14:39:00 +00:00
Seungha Yang
3308a976bd
d3d12: Add upload element
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5870 >
2023-12-29 14:39:00 +00:00
Seungha Yang
e4f794cbdd
d3d12bufferpool: Wait fence before reusing buffer
...
Buffer can be released without waiting fence for previous commands
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5870 >
2023-12-29 14:39:00 +00:00
Seungha Yang
1c5bba4b6b
d3d12decoder: Remove ID3D12Device4 interface requirement
...
Old OS may not support the interface. And allow 11_0 feature level
hardware.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5870 >
2023-12-29 14:38:59 +00:00
Seungha Yang
4e5d4a45a3
d3d12decoder: Reduce the number of resource barriers
...
Single barrier per texture is sufficient in case of array-of-textures.
Avoid unnecessary decay barriers
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5870 >
2023-12-29 14:38:59 +00:00
Seungha Yang
e6bdb0458c
d3d12decoder: Use flexible task queue
...
Instead of using fixed size command allocator array, make it
resizable.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5870 >
2023-12-29 14:38:59 +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
Seungha Yang
6d7d9291c3
d3d12: Add resource pool objects
...
Adding pool objects for command list, command allocator, and descriptor
heap
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5870 >
2023-12-29 14:38:59 +00:00
Seungha Yang
93458c0155
d3d12memory: Add more SRV/RTV getter methods
...
Adding a method so that memory object can create SRV/RTV
on external descriptor heap. And remove unused methods
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5870 >
2023-12-29 14:38:59 +00:00
Seungha Yang
2578f234dd
d3d12: Remove d3d11 dependency
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5870 >
2023-12-29 14:38:59 +00:00
Seungha Yang
800a83b435
d3d12decoder: Implement threaded decoding
...
To achieve maximum throughput, waiting on command commit thread
is not ideal. And render-delay will introduce unwanted latency.
Best is to split thread and wait finished decoding job in a dedicated
output thread
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5812 >
2023-12-15 22:56:33 +09:00
Seungha Yang
7471db9a30
d3d12decoder: Disable d3d11 interop
...
It does not seem to work with some AMD iGPU
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5812 >
2023-12-15 20:40:21 +09:00
Seungha Yang
7afa914054
d3d12fence: Reset fence after waiting done
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5812 >
2023-12-15 19:48:40 +09:00
Seungha Yang
a24a155279
d3d12: Enable debug layer
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5812 >
2023-12-15 19:48:40 +09:00
Seungha Yang
7443cc00b5
d3d12: Requires ID3D12Device4 interface
...
ID3D12Device4::CreateCommandList1() method is required
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5812 >
2023-12-15 19:48:39 +09:00
Seungha Yang
818c95e8c3
d3d12: Update allocation params signalling
...
Sync up with d3d11 implementation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5812 >
2023-12-15 19:48:36 +09:00
Seungha Yang
fab1c5f953
d3d12: Use d3dx12.h helper library
...
... and remove manually implemented helper methods
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5807 >
2023-12-14 18:08:00 +09:00
Seungha Yang
38c04a5f34
d3d12: Use DirectX-Headers and drop MinGW build support
...
There are some conflicts between MinGW toolchan and DirectX-Headers.
And due to ABI differences, more fixes are required.
We will support only MSVC build for now
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5807 >
2023-12-14 18:08:00 +09:00
Seungha Yang
c3cef6e923
d3d12: Fix build with GST_DISABLE_GST_DEBUG
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5585 >
2023-11-03 13:31:03 +00:00
Seungha Yang
c5d60cee01
d3d12decoder: Hide non-default device from docs
...
... and add since marker
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5481 >
2023-10-14 12:32:46 +00:00
Seungha Yang
ed29c23e86
d3d12, dwrite, va: Fix various msys2 build error/warning
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5454 >
2023-10-12 10:53:58 +00:00
Seungha Yang
d9a89cce06
d3d12decoder: Add support for D3D11 interop
...
As a short-term solution before full d3d12 rendering feature,
copy decoded d3d12 texture to shared d3d11 texture in order to use
existing various d3d11 implementations such as conversion, resizing,
and videosink.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5356 >
2023-09-20 10:34:54 +00:00
Seungha Yang
bb040ce571
d3d12decoder: Move common part to helper object
...
Store device at helper object
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5356 >
2023-09-20 10:34:54 +00:00
Seungha Yang
44b02e58fc
d3d12fence: Check completed value before waiting
...
If currently completed fence value is larger than target value,
skip waiting.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5356 >
2023-09-20 10:34:54 +00:00
Seungha Yang
e769ae3dbe
d3d12decoder: Add support for d3d12 output
...
... and enable zero-copy decoding if downstream supports d3d12 memory
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5345 >
2023-09-19 08:52:04 +00:00
Seungha Yang
ff7bde06f2
d3d12decoder: Use GstD3D12BufferPool
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5345 >
2023-09-19 08:52:04 +00:00
Seungha Yang
884f4122b5
d3d12decoder: Use global copy queue and fence value
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5345 >
2023-09-19 08:52:04 +00:00
Seungha Yang
1a7390c85c
d3d12: Remove unused debug category
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5345 >
2023-09-19 08:52:04 +00:00
Seungha Yang
6c9d023861
d3d12: Add d3d12download element
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5345 >
2023-09-19 08:52:04 +00:00