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/4554>
This commit is contained in:
Seungha Yang 2023-05-05 21:53:44 +09:00 committed by GStreamer Marge Bot
parent 7d9747490b
commit 7b6f7e6e36

View file

@ -1606,6 +1606,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);
@ -1615,6 +1616,8 @@ gst_d3d11_allocator_alloc_internal (GstD3D11Allocator * self,
GST_ERROR_OBJECT (self, "Couldn't create texture");
return nullptr;
}
} else {
is_new_texture = FALSE;
}
mem =
@ -1622,6 +1625,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)