From 69ed5f13d84edd9574f088abe1818ab7f76ee7c1 Mon Sep 17 00:00:00 2001 From: Boyuan Zhang Date: Thu, 29 Sep 2022 11:26:25 +0800 Subject: [PATCH] virgl/video: Pass "max_references" to backend when creating a video codec The "max_references" is an important value in sequence parameters, which will be used when encoding SPS headers. Signed-off-by: Boyuan Zhang Signed-off-by: Feng Jiang Reviewed-by: Gert Wollny Part-of: --- src/gallium/drivers/virgl/virgl_encode.c | 7 ++++++- src/virtio/virtio-gpu/virgl_protocol.h | 3 ++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/virgl/virgl_encode.c b/src/gallium/drivers/virgl/virgl_encode.c index ab5f772c25e..364f92b5911 100644 --- a/src/gallium/drivers/virgl/virgl_encode.c +++ b/src/gallium/drivers/virgl/virgl_encode.c @@ -1640,7 +1640,10 @@ void virgl_encode_emit_string_marker(struct virgl_context *ctx, void virgl_encode_create_video_codec(struct virgl_context *ctx, struct virgl_video_codec *cdc) { - virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_CREATE_VIDEO_CODEC, 0, 7)); + struct virgl_screen *rs = virgl_screen(ctx->base.screen); + uint32_t len = rs->caps.caps.v2.host_feature_check_version >= 14 ? 8 : 7; + + virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_CREATE_VIDEO_CODEC, 0, len)); virgl_encoder_write_dword(ctx->cbuf, cdc->handle); virgl_encoder_write_dword(ctx->cbuf, cdc->base.profile); virgl_encoder_write_dword(ctx->cbuf, cdc->base.entrypoint); @@ -1648,6 +1651,8 @@ void virgl_encode_create_video_codec(struct virgl_context *ctx, virgl_encoder_write_dword(ctx->cbuf, cdc->base.level); virgl_encoder_write_dword(ctx->cbuf, cdc->base.width); virgl_encoder_write_dword(ctx->cbuf, cdc->base.height); + if (rs->caps.caps.v2.host_feature_check_version >= 14) + virgl_encoder_write_dword(ctx->cbuf, cdc->base.max_references); } void virgl_encode_destroy_video_codec(struct virgl_context *ctx, diff --git a/src/virtio/virtio-gpu/virgl_protocol.h b/src/virtio/virtio-gpu/virgl_protocol.h index 6d5ba63a442..be65a2f9847 100644 --- a/src/virtio/virtio-gpu/virgl_protocol.h +++ b/src/virtio/virtio-gpu/virgl_protocol.h @@ -709,7 +709,7 @@ enum vrend_tweak_type { #define VIRGL_LINK_SHADER_COMPUTE_HANDLE 6 /* VIRGL_CCMD_CREATE_VIDEO_CODEC */ -#define VIRGL_CREATE_VIDEO_CODEC_SIZE 7 +#define VIRGL_CREATE_VIDEO_CODEC_MIN_SIZE 7 #define VIRGL_CREATE_VIDEO_CODEC_HANDLE 1 #define VIRGL_CREATE_VIDEO_CODEC_PROFILE 2 #define VIRGL_CREATE_VIDEO_CODEC_ENTRYPOINT 3 @@ -717,6 +717,7 @@ enum vrend_tweak_type { #define VIRGL_CREATE_VIDEO_CODEC_LEVEL 5 #define VIRGL_CREATE_VIDEO_CODEC_WIDTH 6 #define VIRGL_CREATE_VIDEO_CODEC_HEIGHT 7 +#define VIRGL_CREATE_VIDEO_CODEC_MAX_REF 8 /* VIRGL_CCMD_DESTROY_VIDEO_CODEC */ #define VIRGL_DESTROY_VIDEO_CODEC_SIZE 1