mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 19:55:32 +00:00
dwrite: Allow unlimited number of in-flight d3d12 commands
... so that it can be controlled by global direct command queue. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7444>
This commit is contained in:
parent
d0505fba55
commit
9363a0af42
1 changed files with 0 additions and 21 deletions
|
@ -32,8 +32,6 @@
|
||||||
GST_DEBUG_CATEGORY_EXTERN (dwrite_overlay_object_debug);
|
GST_DEBUG_CATEGORY_EXTERN (dwrite_overlay_object_debug);
|
||||||
#define GST_CAT_DEFAULT dwrite_overlay_object_debug
|
#define GST_CAT_DEFAULT dwrite_overlay_object_debug
|
||||||
|
|
||||||
#define ASYNC_DEPTH 4
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
using namespace Microsoft::WRL;
|
using namespace Microsoft::WRL;
|
||||||
|
|
||||||
|
@ -85,7 +83,6 @@ struct GstDWriteD3D12RenderPrivate
|
||||||
gst_clear_object (&device);
|
gst_clear_object (&device);
|
||||||
prepared = FALSE;
|
prepared = FALSE;
|
||||||
fence_val = 0;
|
fence_val = 0;
|
||||||
scheduled = { };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GstD3D12Device *device = nullptr;
|
GstD3D12Device *device = nullptr;
|
||||||
|
@ -115,7 +112,6 @@ struct GstDWriteD3D12RenderPrivate
|
||||||
ComPtr<ID3D11On12Device> device11on12;
|
ComPtr<ID3D11On12Device> device11on12;
|
||||||
ComPtr<ID3D11Device> device11;
|
ComPtr<ID3D11Device> device11;
|
||||||
ComPtr<ID3D11DeviceContext> d3d11_context;
|
ComPtr<ID3D11DeviceContext> d3d11_context;
|
||||||
std::queue<guint64> scheduled;
|
|
||||||
};
|
};
|
||||||
/* *INDENT-ON* */
|
/* *INDENT-ON* */
|
||||||
|
|
||||||
|
@ -324,13 +320,6 @@ gst_dwrite_d3d12_render_draw_layout (GstDWriteRender * render,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (priv->scheduled.size () >= ASYNC_DEPTH) {
|
|
||||||
auto fence_to_wait = priv->scheduled.front ();
|
|
||||||
priv->scheduled.pop ();
|
|
||||||
gst_d3d12_device_fence_wait (priv->device,
|
|
||||||
D3D12_COMMAND_LIST_TYPE_DIRECT, fence_to_wait);
|
|
||||||
}
|
|
||||||
|
|
||||||
GstBuffer *layout_buf = nullptr;
|
GstBuffer *layout_buf = nullptr;
|
||||||
gst_buffer_pool_acquire_buffer (priv->layout_pool, &layout_buf, nullptr);
|
gst_buffer_pool_acquire_buffer (priv->layout_pool, &layout_buf, nullptr);
|
||||||
if (!layout_buf) {
|
if (!layout_buf) {
|
||||||
|
@ -374,7 +363,6 @@ gst_dwrite_d3d12_render_draw_layout (GstDWriteRender * render,
|
||||||
1, &args, fence_data, 0, nullptr, nullptr, D3D12_COMMAND_LIST_TYPE_DIRECT,
|
1, &args, fence_data, 0, nullptr, nullptr, D3D12_COMMAND_LIST_TYPE_DIRECT,
|
||||||
&priv->fence_val);
|
&priv->fence_val);
|
||||||
|
|
||||||
priv->scheduled.push (priv->fence_val);
|
|
||||||
gst_d3d12_memory_set_fence (dmem,
|
gst_d3d12_memory_set_fence (dmem,
|
||||||
gst_d3d12_device_get_fence_handle (priv->device,
|
gst_d3d12_device_get_fence_handle (priv->device,
|
||||||
D3D12_COMMAND_LIST_TYPE_DIRECT), priv->fence_val, FALSE);
|
D3D12_COMMAND_LIST_TYPE_DIRECT), priv->fence_val, FALSE);
|
||||||
|
@ -397,13 +385,6 @@ gst_dwrite_d3d12_render_blend (GstDWriteRender * render, GstBuffer * layout_buf,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (priv->scheduled.size () >= ASYNC_DEPTH) {
|
|
||||||
auto fence_to_wait = priv->scheduled.front ();
|
|
||||||
priv->scheduled.pop ();
|
|
||||||
gst_d3d12_device_fence_wait (priv->device,
|
|
||||||
D3D12_COMMAND_LIST_TYPE_DIRECT, fence_to_wait);
|
|
||||||
}
|
|
||||||
|
|
||||||
GstD3D12Frame out_frame;
|
GstD3D12Frame out_frame;
|
||||||
if (!gst_d3d12_frame_map (&out_frame, &priv->info, output,
|
if (!gst_d3d12_frame_map (&out_frame, &priv->info, output,
|
||||||
GST_MAP_WRITE_D3D12, GST_D3D12_FRAME_MAP_FLAG_RTV)) {
|
GST_MAP_WRITE_D3D12, GST_D3D12_FRAME_MAP_FLAG_RTV)) {
|
||||||
|
@ -543,8 +524,6 @@ gst_dwrite_d3d12_render_blend (GstDWriteRender * render, GstBuffer * layout_buf,
|
||||||
gst_d3d12_command_queue_set_notify (cq, priv->fence_val,
|
gst_d3d12_command_queue_set_notify (cq, priv->fence_val,
|
||||||
FENCE_NOTIFY_MINI_OBJECT (fence_data));
|
FENCE_NOTIFY_MINI_OBJECT (fence_data));
|
||||||
|
|
||||||
priv->scheduled.push (priv->fence_val);
|
|
||||||
|
|
||||||
for (guint i = 0; i < gst_buffer_n_memory (output); i++) {
|
for (guint i = 0; i < gst_buffer_n_memory (output); i++) {
|
||||||
auto dmem = (GstD3D12Memory *) gst_buffer_peek_memory (output, i);
|
auto dmem = (GstD3D12Memory *) gst_buffer_peek_memory (output, i);
|
||||||
gst_d3d12_memory_set_fence (dmem, fence, priv->fence_val, FALSE);
|
gst_d3d12_memory_set_fence (dmem, fence, priv->fence_val, FALSE);
|
||||||
|
|
Loading…
Reference in a new issue