Module: Mesa Branch: master Commit: 364857ffe810d21bb3946f06f24149b7b580711b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=364857ffe810d21bb3946f06f24149b7b580711b
Author: Simon Ser <[email protected]> Date: Fri Feb 26 16:49:17 2021 +0100 radeonsi/uvd: make format modifiers-aware When format modifiers are supported, use resource_create_with_modifiers instead of resource_create. This allows radeonsi to set the modifier field, and allows VA-API clients to have a proper modifier instead of DRM_FORMAT_MOD_INVALID. Signed-off-by: Simon Ser <[email protected]> Reviewed-by: Bas Nieuwenhuizen <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9308> --- src/gallium/auxiliary/vl/vl_video_buffer.c | 11 +++++++++-- src/gallium/auxiliary/vl/vl_video_buffer.h | 4 +++- src/gallium/drivers/radeonsi/si_uvd.c | 13 ++++++++++++- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/gallium/auxiliary/vl/vl_video_buffer.c b/src/gallium/auxiliary/vl/vl_video_buffer.c index 54cc0c52909..eb13f89dd16 100644 --- a/src/gallium/auxiliary/vl/vl_video_buffer.c +++ b/src/gallium/auxiliary/vl/vl_video_buffer.c @@ -466,7 +466,9 @@ vl_video_buffer_create_ex2(struct pipe_context *pipe, /* Create pipe_video_buffer by using resource_create with planar formats. */ struct pipe_video_buffer * vl_video_buffer_create_as_resource(struct pipe_context *pipe, - const struct pipe_video_buffer *tmpl) + const struct pipe_video_buffer *tmpl, + const uint64_t *modifiers, + int modifiers_count) { struct pipe_resource templ, *resources[VL_NUM_COMPONENTS] = {0}; unsigned array_size = tmpl->interlaced ? 2 : 1; @@ -487,7 +489,12 @@ vl_video_buffer_create_as_resource(struct pipe_context *pipe, else templ.format = tmpl->buffer_format; - resources[0] = pipe->screen->resource_create(pipe->screen, &templ); + if (modifiers) + resources[0] = pipe->screen->resource_create_with_modifiers(pipe->screen, + &templ, modifiers, + modifiers_count); + else + resources[0] = pipe->screen->resource_create(pipe->screen, &templ); if (!resources[0]) return NULL; diff --git a/src/gallium/auxiliary/vl/vl_video_buffer.h b/src/gallium/auxiliary/vl/vl_video_buffer.h index 2045f04a391..f777ddb0fa3 100644 --- a/src/gallium/auxiliary/vl/vl_video_buffer.h +++ b/src/gallium/auxiliary/vl/vl_video_buffer.h @@ -150,6 +150,8 @@ vl_video_buffer_create_ex2(struct pipe_context *pipe, /* Create pipe_video_buffer by using resource_create with planar formats. */ struct pipe_video_buffer * vl_video_buffer_create_as_resource(struct pipe_context *pipe, - const struct pipe_video_buffer *tmpl); + const struct pipe_video_buffer *tmpl, + const uint64_t *modifiers, + int modifiers_count); #endif /* vl_video_buffer_h */ diff --git a/src/gallium/drivers/radeonsi/si_uvd.c b/src/gallium/drivers/radeonsi/si_uvd.c index 0f38cce0f96..b6656fdc865 100644 --- a/src/gallium/drivers/radeonsi/si_uvd.c +++ b/src/gallium/drivers/radeonsi/si_uvd.c @@ -25,6 +25,7 @@ * **************************************************************************/ +#include "drm-uapi/drm_fourcc.h" #include "radeon/radeon_uvd.h" #include "radeon/radeon_uvd_enc.h" #include "radeon/radeon_vce.h" @@ -41,10 +42,20 @@ struct pipe_video_buffer *si_video_buffer_create(struct pipe_context *pipe, const struct pipe_video_buffer *tmpl) { struct pipe_video_buffer vidbuf = *tmpl; + uint64_t *modifiers = NULL; + int modifiers_count = 0; + uint64_t mod = DRM_FORMAT_MOD_LINEAR; + /* TODO: get tiling working */ vidbuf.bind |= PIPE_BIND_LINEAR; - return vl_video_buffer_create_as_resource(pipe, &vidbuf); + if (pipe->screen->resource_create_with_modifiers) { + modifiers = &mod; + modifiers_count = 1; + } + + return vl_video_buffer_create_as_resource(pipe, &vidbuf, modifiers, + modifiers_count); } /* set the decoding target buffer offsets */ _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
