> -----Original Message-----
> From: ffmpeg-devel <ffmpeg-devel-boun...@ffmpeg.org> On Behalf Of
> Steve Lhomme
> Sent: Saturday, August 8, 2020 7:10 AM
> To: ffmpeg-devel@ffmpeg.org
> Subject: Re: [FFmpeg-devel] [PATCH v3 1/2] dxva: wait until D3D11 buffer
> copies are done before submitting them

[...]

> >
> > Hi Steven,
> 
> Hi,
> 
> > A while ago I had extended D3D11VA implementation to support single
> > (non-array textures) for interoperability with Intel QSV+DX11.
> 
> Looking at your code, it seems you are copying from an array texture to a
> single slice texture to achieve this. With double the amount of RAM.
> It may be a design issue with the new D3D11 API, which forces you to do

With D3D11, it's mandatory to use a staging texture, which is not only done
in my code but also in the original implementation (hwcontext_d3d11va.c)
https://github.com/FFmpeg/FFmpeg/blob/master/libavutil/hwcontext_d3d11va.c

> that, but I'm not using that API. I'm using the old API.

I'm not sure whether I understand what you mean by this. To my knowledge
there are two DX hw context implementations in ffmpeg:

- DXVA2
- D3D11VA

I'm not aware of a variant like "D3D11 with old API". Could you please 
elaborate?

> 
> > Hence, I don't think that your patch is the best possible way .
> 
> Removing locks and saying "it works for me" is neither a correct solution. 

How did you come to the conclusion that I might be working like this?

> the very least the locks are needed inside libavcodec to avoid setting DXVA
> buffers concurrently from different threads. It will most likely result in 
> very
> bad distortions if not crashes. Maybe you're only using 1 decoding thread
> with DXVA (which a lot of people do) so you don't have this issue, but this is
> not my case.

I see no point in employing multiple threads for hw accelerated decoding.
To be honest I never looked into or tried whether ffmpeg even supports 
multiple threads with dva2 or d3d11va hw acceleration.

> Also ID3D10Multithread::SetMultithreadProtected means that the resources
> can be accessed from multiple threads. It doesn't mean that calls to
> ID3D11DeviceContext are safe from multithreading. And my experience
> shows that it is not. In fact if you have the Windows SDK installed and you
> have concurrent accesses, you'll get a big warning in your debug logs that you
> are doing something fishy. On WindowsPhone it would even crash. This is
> how I ended up adding the mutex to the old API
> (e3d4784eb31b3ea4a97f2d4c698a75fab9bf3d86).
> 
> The documentation for ID3D11DeviceContext is very clear about that [1]:
> "Because each ID3D11DeviceContext is single threaded, only one thread can
> call a ID3D11DeviceContext at a time. If multiple threads must access a single
> ID3D11DeviceContext, they must use some synchronization mechanism,
> such as critical sections, to synchronize access to that ID3D11DeviceContext."

Yes, but this doesn't apply to accessing staging textures IIRC.

In fact, I had researched this in-depth, but I can't tell much more without
looking into it again.

The patch I referenced is working in production on thousands of installations 
and tested with many different hardware and driver versions from Nvidia, 
Intel and AMD.

Kind regards,
softworkz


_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to