diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12device.cpp b/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12device.cpp index bf0e0bd126..bc83689fe1 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12device.cpp +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12device.cpp @@ -1352,16 +1352,16 @@ gst_d3d12_device_get_command_queue (GstD3D12Device * device, * Exectues gst_d3d12_command_queue_execute_command_lists () * using a #GstD3D12CommandQueue corresponding to @queue_type * - * Returns: %TRUE if successful + * Returns: HRESULT code * * Since: 1.26 */ -gboolean +HRESULT gst_d3d12_device_execute_command_lists (GstD3D12Device * device, D3D12_COMMAND_LIST_TYPE queue_type, guint num_command_lists, ID3D12CommandList ** command_lists, guint64 * fence_value) { - g_return_val_if_fail (GST_IS_D3D12_DEVICE (device), FALSE); + g_return_val_if_fail (GST_IS_D3D12_DEVICE (device), E_INVALIDARG); auto priv = device->priv->inner; GstD3D12CommandQueue *queue; @@ -1375,13 +1375,11 @@ gst_d3d12_device_execute_command_lists (GstD3D12Device * device, break; default: GST_ERROR_OBJECT (device, "Not supported queue type %d", queue_type); - return FALSE; + return E_INVALIDARG; } - auto hr = gst_d3d12_command_queue_execute_command_lists (queue, + return gst_d3d12_command_queue_execute_command_lists (queue, num_command_lists, command_lists, fence_value); - - return gst_d3d12_result (hr, device); } /** @@ -1474,16 +1472,16 @@ gst_d3d12_device_set_fence_notify (GstD3D12Device * device, * Exectues gst_d3d12_command_queue_fence_wait () * using a #GstD3D12CommandQueue corresponding to @queue_type * - * Returns: %TRUE if successful + * Returns: HRESULT code * * Since: 1.26 */ -gboolean +HRESULT gst_d3d12_device_fence_wait (GstD3D12Device * device, D3D12_COMMAND_LIST_TYPE queue_type, guint64 fence_value, HANDLE event_handle) { - g_return_val_if_fail (GST_IS_D3D12_DEVICE (device), FALSE); + g_return_val_if_fail (GST_IS_D3D12_DEVICE (device), E_INVALIDARG); auto priv = device->priv->inner; GstD3D12CommandQueue *queue; @@ -1497,13 +1495,10 @@ gst_d3d12_device_fence_wait (GstD3D12Device * device, break; default: GST_ERROR_OBJECT (device, "Not supported queue type %d", queue_type); - return FALSE; + return E_INVALIDARG; } - auto hr = gst_d3d12_command_queue_fence_wait (queue, - fence_value, event_handle); - - return gst_d3d12_result (hr, device); + return gst_d3d12_command_queue_fence_wait (queue, fence_value, event_handle); } gboolean diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12device.h b/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12device.h index bb343c64d3..4794656145 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12device.h +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12device.h @@ -94,7 +94,7 @@ GstD3D12CommandQueue * gst_d3d12_device_get_command_queue (GstD3D12Devic D3D12_COMMAND_LIST_TYPE queue_type); GST_D3D12_API -gboolean gst_d3d12_device_execute_command_lists (GstD3D12Device * device, +HRESULT gst_d3d12_device_execute_command_lists (GstD3D12Device * device, D3D12_COMMAND_LIST_TYPE queue_type, guint num_command_lists, ID3D12CommandList ** command_lists, @@ -111,7 +111,7 @@ gboolean gst_d3d12_device_set_fence_notify (GstD3D12Devic GstD3D12FenceData * fence_data); GST_D3D12_API -gboolean gst_d3d12_device_fence_wait (GstD3D12Device * device, +HRESULT gst_d3d12_device_fence_wait (GstD3D12Device * device, D3D12_COMMAND_LIST_TYPE queue_type, guint64 fence_value, HANDLE event_handle); diff --git a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12compositor.cpp b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12compositor.cpp index 216d6af724..b57034e134 100644 --- a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12compositor.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12compositor.cpp @@ -2321,9 +2321,9 @@ gst_d3d12_compositor_draw_background (GstD3D12Compositor * self) ID3D12CommandList *cmd_list[] = { cl.Get () }; - if (!gst_d3d12_device_execute_command_lists (self->device, - D3D12_COMMAND_LIST_TYPE_DIRECT, 1, cmd_list, - &priv->bg_render->fence_val)) { + hr = gst_d3d12_device_execute_command_lists (self->device, + D3D12_COMMAND_LIST_TYPE_DIRECT, 1, cmd_list, &priv->bg_render->fence_val); + if (!gst_d3d12_result (hr, self->device)) { GST_ERROR_OBJECT (self, "Couldn't execute command list"); gst_d3d12_fence_data_unref (fence_data); return FALSE; @@ -2412,9 +2412,11 @@ gst_d3d12_compositor_aggregate_frames (GstVideoAggregator * vagg, GST_LOG_OBJECT (cpad, "Command list prepared"); ID3D12CommandList *cmd_list[] = { pad_priv->ctx->cl.Get () }; - if (!gst_d3d12_device_execute_command_lists (self->device, - D3D12_COMMAND_LIST_TYPE_DIRECT, 1, cmd_list, - &pad_priv->ctx->fence_val)) { + + auto hr = gst_d3d12_device_execute_command_lists (self->device, + D3D12_COMMAND_LIST_TYPE_DIRECT, 1, cmd_list, + &pad_priv->ctx->fence_val); + if (!gst_d3d12_result (hr, self->device)) { GST_ERROR_OBJECT (self, "Couldn't execute command list"); ret = GST_FLOW_ERROR; break; diff --git a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12convert.cpp b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12convert.cpp index 5f0b2b8242..988982d95c 100644 --- a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12convert.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12convert.cpp @@ -2030,8 +2030,9 @@ gst_d3d12_convert_transform (GstBaseTransform * trans, GstBuffer * inbuf, ID3D12CommandList *cmd_list[] = { priv->ctx->cl.Get () }; - if (!gst_d3d12_device_execute_command_lists (priv->ctx->device, - D3D12_COMMAND_LIST_TYPE_DIRECT, 1, cmd_list, &priv->ctx->fence_val)) { + hr = gst_d3d12_device_execute_command_lists (priv->ctx->device, + D3D12_COMMAND_LIST_TYPE_DIRECT, 1, cmd_list, &priv->ctx->fence_val); + if (!gst_d3d12_result (hr, priv->ctx->device)) { GST_ERROR_OBJECT (self, "Couldn't execute command list"); gst_d3d12_fence_data_unref (fence_data); return GST_FLOW_ERROR; diff --git a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12testsrc.cpp b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12testsrc.cpp index 512ed07a60..1e9cdc8b04 100644 --- a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12testsrc.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12testsrc.cpp @@ -2222,8 +2222,9 @@ gst_d3d12_test_src_create (GstBaseSrc * bsrc, guint64 offset, ID3D12CommandList *cmd_list[] = { priv->ctx->cl.Get () }; - if (!gst_d3d12_device_execute_command_lists (self->device, - D3D12_COMMAND_LIST_TYPE_DIRECT, 1, cmd_list, &priv->ctx->fence_val)) { + hr = gst_d3d12_device_execute_command_lists (self->device, + D3D12_COMMAND_LIST_TYPE_DIRECT, 1, cmd_list, &priv->ctx->fence_val); + if (!gst_d3d12_result (hr, self->device)) { GST_ERROR_OBJECT (self, "Couldn't execute command list"); gst_d3d12_fence_data_unref (fence_data); return GST_FLOW_ERROR; diff --git a/subprojects/gst-plugins-bad/sys/dwrite/gstdwriterender_d3d12.cpp b/subprojects/gst-plugins-bad/sys/dwrite/gstdwriterender_d3d12.cpp index ecee3a904e..80c5f064cf 100644 --- a/subprojects/gst-plugins-bad/sys/dwrite/gstdwriterender_d3d12.cpp +++ b/subprojects/gst-plugins-bad/sys/dwrite/gstdwriterender_d3d12.cpp @@ -533,8 +533,9 @@ gst_dwrite_d3d12_render_blend (GstDWriteRender * render, GstBuffer * layout_buf, if (ret) { ID3D12CommandList *cl[] = { priv->cl.Get () }; - ret = gst_d3d12_device_execute_command_lists (priv->device, + hr = gst_d3d12_device_execute_command_lists (priv->device, D3D12_COMMAND_LIST_TYPE_DIRECT, 1, cl, &priv->fence_val); + ret = gst_d3d12_result (hr, priv->device); } if (ret) {