mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-22 17:51:16 +00:00
d3d12: Always allocate output texture using shared heap
... if downstream preference is unknown (e.g., no proposed buffer pool by downstream), so that produced textures can be shareable with other APIs such as d3d11 or vulkan, or other processes Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7193>
This commit is contained in:
parent
9629d78b7c
commit
72895ed0fa
5 changed files with 13 additions and 6 deletions
|
@ -2155,7 +2155,8 @@ gst_d3d12_compositor_decide_allocation (GstAggregator * agg, GstQuery * query)
|
||||||
params = gst_d3d12_allocation_params_new (self->device, &info,
|
params = gst_d3d12_allocation_params_new (self->device, &info,
|
||||||
GST_D3D12_ALLOCATION_FLAG_DEFAULT,
|
GST_D3D12_ALLOCATION_FLAG_DEFAULT,
|
||||||
D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET |
|
D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET |
|
||||||
D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS, D3D12_HEAP_FLAG_NONE);
|
D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS,
|
||||||
|
D3D12_HEAP_FLAG_SHARED);
|
||||||
} else {
|
} else {
|
||||||
gst_d3d12_allocation_params_set_resource_flags (params,
|
gst_d3d12_allocation_params_set_resource_flags (params,
|
||||||
D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET |
|
D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET |
|
||||||
|
|
|
@ -1571,7 +1571,10 @@ gst_d3d12_convert_decide_allocation (GstBaseTransform * trans, GstQuery * query)
|
||||||
if ((device_format.format_flags & GST_D3D12_FORMAT_FLAG_OUTPUT_UAV)
|
if ((device_format.format_flags & GST_D3D12_FORMAT_FLAG_OUTPUT_UAV)
|
||||||
== GST_D3D12_FORMAT_FLAG_OUTPUT_UAV) {
|
== GST_D3D12_FORMAT_FLAG_OUTPUT_UAV) {
|
||||||
resource_flags |= D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS;
|
resource_flags |= D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS;
|
||||||
} else {
|
}
|
||||||
|
|
||||||
|
if ((device_format.support1 & D3D12_FORMAT_SUPPORT1_RENDER_TARGET) ==
|
||||||
|
D3D12_FORMAT_SUPPORT1_RENDER_TARGET) {
|
||||||
resource_flags |= D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET;
|
resource_flags |= D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1580,7 +1583,7 @@ gst_d3d12_convert_decide_allocation (GstBaseTransform * trans, GstQuery * query)
|
||||||
if (!d3d12_params) {
|
if (!d3d12_params) {
|
||||||
d3d12_params = gst_d3d12_allocation_params_new (filter->device, &info,
|
d3d12_params = gst_d3d12_allocation_params_new (filter->device, &info,
|
||||||
GST_D3D12_ALLOCATION_FLAG_DEFAULT, resource_flags,
|
GST_D3D12_ALLOCATION_FLAG_DEFAULT, resource_flags,
|
||||||
D3D12_HEAP_FLAG_NONE);
|
D3D12_HEAP_FLAG_SHARED);
|
||||||
} else {
|
} else {
|
||||||
gst_d3d12_allocation_params_set_resource_flags (d3d12_params,
|
gst_d3d12_allocation_params_set_resource_flags (d3d12_params,
|
||||||
resource_flags);
|
resource_flags);
|
||||||
|
|
|
@ -1793,9 +1793,12 @@ gst_d3d12_decoder_decide_allocation (GstD3D12Decoder * decoder,
|
||||||
if (!params) {
|
if (!params) {
|
||||||
params = gst_d3d12_allocation_params_new (decoder->device, &vinfo,
|
params = gst_d3d12_allocation_params_new (decoder->device, &vinfo,
|
||||||
GST_D3D12_ALLOCATION_FLAG_DEFAULT,
|
GST_D3D12_ALLOCATION_FLAG_DEFAULT,
|
||||||
D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS, D3D12_HEAP_FLAG_NONE);
|
D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET |
|
||||||
|
D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS,
|
||||||
|
D3D12_HEAP_FLAG_SHARED);
|
||||||
} else {
|
} else {
|
||||||
gst_d3d12_allocation_params_set_resource_flags (params,
|
gst_d3d12_allocation_params_set_resource_flags (params,
|
||||||
|
D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET |
|
||||||
D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS);
|
D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -300,7 +300,7 @@ gst_d3d12_client_update_caps (GstD3D12IpcClient * self, GstCaps * caps)
|
||||||
auto params = gst_d3d12_allocation_params_new (priv->device, &priv->info,
|
auto params = gst_d3d12_allocation_params_new (priv->device, &priv->info,
|
||||||
GST_D3D12_ALLOCATION_FLAG_DEFAULT,
|
GST_D3D12_ALLOCATION_FLAG_DEFAULT,
|
||||||
D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS |
|
D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS |
|
||||||
D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET, D3D12_HEAP_FLAG_NONE);
|
D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET, D3D12_HEAP_FLAG_SHARED);
|
||||||
|
|
||||||
gst_buffer_pool_config_set_d3d12_allocation_params (config, params);
|
gst_buffer_pool_config_set_d3d12_allocation_params (config, params);
|
||||||
gst_d3d12_allocation_params_free (params);
|
gst_d3d12_allocation_params_free (params);
|
||||||
|
|
|
@ -1876,7 +1876,7 @@ gst_d3d12_test_src_decide_allocation (GstBaseSrc * bsrc, GstQuery * query)
|
||||||
if (!params) {
|
if (!params) {
|
||||||
params = gst_d3d12_allocation_params_new (self->device, &vinfo,
|
params = gst_d3d12_allocation_params_new (self->device, &vinfo,
|
||||||
GST_D3D12_ALLOCATION_FLAG_DEFAULT, resource_flags,
|
GST_D3D12_ALLOCATION_FLAG_DEFAULT, resource_flags,
|
||||||
D3D12_HEAP_FLAG_NONE);
|
D3D12_HEAP_FLAG_SHARED);
|
||||||
} else {
|
} else {
|
||||||
gst_d3d12_allocation_params_set_resource_flags (params, resource_flags);
|
gst_d3d12_allocation_params_set_resource_flags (params, resource_flags);
|
||||||
gst_d3d12_allocation_params_unset_resource_flags (params,
|
gst_d3d12_allocation_params_unset_resource_flags (params,
|
||||||
|
|
Loading…
Reference in a new issue