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