On 08/05/2020 21:26, Hendrik Leppkes wrote: > On Fri, May 8, 2020 at 5:51 PM <artem.ga...@gmail.com> wrote: >> >> From: Artem Galin <artem.ga...@intel.com> >> >> Added AVD3D11FrameDescriptors array to store array of single textures in >> case if there is no way >> to allocate array texture with BindFlags = D3D11_BIND_RENDER_TARGET. >> >> Signed-off-by: Artem Galin <artem.ga...@intel.com> >> --- >> libavutil/hwcontext_d3d11va.c | 26 ++++++++++++++++++++------ >> libavutil/hwcontext_d3d11va.h | 9 +++++++++ >> 2 files changed, 29 insertions(+), 6 deletions(-) >> >> ... >> diff --git a/libavutil/hwcontext_d3d11va.h b/libavutil/hwcontext_d3d11va.h >> index 9f91e9b1b6..295bdcd90d 100644 >> --- a/libavutil/hwcontext_d3d11va.h >> +++ b/libavutil/hwcontext_d3d11va.h >> @@ -164,6 +164,15 @@ typedef struct AVD3D11VAFramesContext { >> * This field is ignored/invalid if a user-allocated texture is >> provided. >> */ >> UINT MiscFlags; >> + >> + /** >> + * In case if texture structure member above is not NULL contains the >> same texture >> + * pointer for all elements and different indexes into the array >> texture. >> + * In case if texture structure member above is NULL, all elements >> contains >> + * pointers to separate non-array textures and 0 indexes. >> + * This field is ignored/invalid if a user-allocated texture is >> provided. >> + */ >> + AVD3D11FrameDescriptor *texture_infos; >> } AVD3D11VAFramesContext; >> > > > I'm not really a fan of this. Only supporting array textures was an > intentional design decision back when D3D11VA was defined, because it > greatly simplified the entire design - and as far as I know the > d3d11va decoder, for example, doesnt even support decoding into > anything else.
For an decoder, yes, because the set of things to render to can easily be constrained. For an encoder, you want to support more cases then just textures generated by a decoder, and ideally that would allow arbitrary textures with the right properties so that the encoder is not weirdly gimped (compare NVENC, which does accept any texture). The barrier to making that work is this horrible texture preregistration requirement where we need to be able to find all of the textures which might be used up front, not the single/array texture difference. While changing the API here is not fun, following the method used for the same problem with D3D9 surfaces seems like the simplest way to make it all work nicely. Possibly I am not understanding something here, though - I don't see what this has to do with the setting of D3D11_BIND_RENDER_TARGET (and in particular why the code discards the array index if this flag is set). - Mark _______________________________________________ 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".