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);
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,
#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
#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