d3d11memory: Don't clear wrapped texture memory

The external texture may hold already rendered scene and therefore
it should not be cleared in alloc method

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4558>
This commit is contained in:
Seungha Yang 2023-05-05 21:53:44 +09:00 committed by GStreamer Marge Bot
parent 5c863418ba
commit e23645b5ad

View file

@ -1473,6 +1473,7 @@ gst_d3d11_allocator_alloc_internal (GstD3D11Allocator * self,
GstD3D11Memory *dmem;
ID3D11RenderTargetView *rtv = nullptr;
GstD3D11ClearRTVFunc clear_func = nullptr;
gboolean is_new_texture = TRUE;
device_handle = gst_d3d11_device_get_device_handle (device);
@ -1482,6 +1483,8 @@ gst_d3d11_allocator_alloc_internal (GstD3D11Allocator * self,
GST_ERROR_OBJECT (self, "Couldn't create texture");
return nullptr;
}
} else {
is_new_texture = FALSE;
}
mem =
@ -1489,6 +1492,10 @@ gst_d3d11_allocator_alloc_internal (GstD3D11Allocator * self,
if (!mem)
return nullptr;
/* Don't clear external texture */
if (!is_new_texture)
return mem;
/* Clear with YUV black if needed and possible
* TODO: do this using UAV if RTV is not allowed (e.g., packed YUV formats) */
if ((desc->BindFlags & D3D11_BIND_RENDER_TARGET) == 0)