virgl/video: Pass "max_references" to backend when creating a video codec
authorBoyuan Zhang <Boyuan.Zhang@amd.com>
Thu, 29 Sep 2022 03:26:25 +0000 (11:26 +0800)
committerMarge Bot <emma+marge@anholt.net>
Fri, 18 Nov 2022 07:46:11 +0000 (07:46 +0000)
The "max_references" is an important value in sequence parameters,
which will be used when encoding SPS headers.

Signed-off-by: Boyuan Zhang <Boyuan.Zhang@amd.com>
Signed-off-by: Feng Jiang <jiangfeng@kylinos.cn>
Reviewed-by: Gert Wollny <gert.wollny@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18831>

src/gallium/drivers/virgl/virgl_encode.c
src/virtio/virtio-gpu/virgl_protocol.h

index ab5f772..364f92b 100644 (file)
@@ -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,
index 6d5ba63..be65a2f 100644 (file)
@@ -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