OSDN Git Service

Update README.md
[android-x86/hardware-intel-common-vaapi.git] / src / i965_device_info.c
index f21a9f5..a6adcf5 100644 (file)
 /* Extra set of chroma formats supported for JPEG encoding (beyond YUV 4:2:0) */
 #define EXTRA_JPEG_ENC_CHROMA_FORMATS \
     (VA_RT_FORMAT_YUV400| VA_RT_FORMAT_YUV422 | VA_RT_FORMAT_YUV444 | VA_RT_FORMAT_RGB32)
-     
+
+#define EXTRA_HEVC_DEC_CHROMA_FORMATS \
+    (VA_RT_FORMAT_YUV420_10BPP)
+
+#define EXTRA_VP9_DEC_CHROMA_FORMATS \
+    (VA_RT_FORMAT_YUV420_10BPP)
+
 /* Defines VA profile as a 32-bit unsigned integer mask */
 #define VA_PROFILE_MASK(PROFILE) \
     (1U << VAProfile##PROFILE)
 
+#define VP9_PROFILE_MASK(PROFILE) \
+    (1U << PROFILE)
+
 extern struct hw_context *i965_proc_context_init(VADriverContextP, struct object_config *);
 extern struct hw_context *g4x_dec_hw_context_init(VADriverContextP, struct object_config *);
 extern bool genx_render_init(VADriverContextP);
@@ -63,7 +72,7 @@ static struct hw_codec_info g4x_hw_codec_info = {
     .max_width = 2048,
     .max_height = 2048,
     .min_linear_wpitch = 16,
-    .min_linear_hpitch = 16,
+    .min_linear_hpitch = 4,
 
     .has_mpeg2_decoding = 1,
 
@@ -83,7 +92,7 @@ static struct hw_codec_info ilk_hw_codec_info = {
     .max_width = 2048,
     .max_height = 2048,
     .min_linear_wpitch = 16,
-    .min_linear_hpitch = 16,
+    .min_linear_hpitch = 4,
 
     .has_mpeg2_decoding = 1,
     .has_h264_decoding = 1,
@@ -108,7 +117,7 @@ static struct hw_codec_info snb_hw_codec_info = {
     .max_width = 2048,
     .max_height = 2048,
     .min_linear_wpitch = 16,
-    .min_linear_hpitch = 16,
+    .min_linear_hpitch = 4,
 
     .h264_mvc_dec_profiles = VA_PROFILE_MASK(H264StereoHigh),
     .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS,
@@ -123,6 +132,8 @@ static struct hw_codec_info snb_hw_codec_info = {
     .has_tiled_surface = 1,
     .has_di_motion_adptive = 1,
 
+    .h264_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR,
+
     .num_filters = 2,
     .filters = {
         { VAProcFilterNoiseReduction, I965_RING_NULL },
@@ -145,7 +156,7 @@ static struct hw_codec_info ivb_hw_codec_info = {
     .max_width = 4096,
     .max_height = 4096,
     .min_linear_wpitch = 64,
-    .min_linear_hpitch = 16,
+    .min_linear_hpitch = 4,
 
     .h264_mvc_dec_profiles = VA_PROFILE_MASK(H264StereoHigh),
     .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS,
@@ -162,6 +173,9 @@ static struct hw_codec_info ivb_hw_codec_info = {
     .has_accelerated_putimage = 1,
     .has_tiled_surface = 1,
     .has_di_motion_adptive = 1,
+    .has_di_motion_compensated = 1,
+
+    .h264_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR,
 
     .num_filters = 2,
     .filters = {
@@ -186,10 +200,10 @@ static struct hw_codec_info hsw_hw_codec_info = {
     .max_width = 4096,
     .max_height = 4096,
     .min_linear_wpitch = 64,
-    .min_linear_hpitch = 16,
+    .min_linear_hpitch = 4,
 
     .h264_mvc_dec_profiles = (VA_PROFILE_MASK(H264StereoHigh) |
-                              VA_PROFILE_MASK(H264MultiviewHigh)),
+    VA_PROFILE_MASK(H264MultiviewHigh)),
     .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS,
     .jpeg_dec_chroma_formats = EXTRA_JPEG_DEC_CHROMA_FORMATS,
 
@@ -207,6 +221,8 @@ static struct hw_codec_info hsw_hw_codec_info = {
     .has_di_motion_compensated = 1,
     .has_h264_mvc_encoding = 1,
 
+    .h264_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR,
+
     .num_filters = 5,
     .filters = {
         { VAProcFilterNoiseReduction, I965_RING_VEBOX },
@@ -230,10 +246,10 @@ static struct hw_codec_info bdw_hw_codec_info = {
     .max_width = 4096,
     .max_height = 4096,
     .min_linear_wpitch = 64,
-    .min_linear_hpitch = 16,
+    .min_linear_hpitch = 4,
 
     .h264_mvc_dec_profiles = (VA_PROFILE_MASK(H264StereoHigh) |
-                              VA_PROFILE_MASK(H264MultiviewHigh)),
+    VA_PROFILE_MASK(H264MultiviewHigh)),
     .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS,
     .jpeg_dec_chroma_formats = EXTRA_JPEG_DEC_CHROMA_FORMATS,
 
@@ -252,6 +268,8 @@ static struct hw_codec_info bdw_hw_codec_info = {
     .has_vp8_decoding = 1,
     .has_h264_mvc_encoding = 1,
 
+    .h264_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR,
+
     .num_filters = 5,
     .filters = {
         { VAProcFilterNoiseReduction, I965_RING_VEBOX },
@@ -262,8 +280,9 @@ static struct hw_codec_info bdw_hw_codec_info = {
     },
 };
 
+extern struct hw_context *gen9_dec_hw_context_init(VADriverContextP, struct object_config *);
 static struct hw_codec_info chv_hw_codec_info = {
-    .dec_hw_context_init = gen8_dec_hw_context_init,
+    .dec_hw_context_init = gen9_dec_hw_context_init,
     .enc_hw_context_init = gen8_enc_hw_context_init,
     .proc_hw_context_init = gen75_proc_context_init,
     .render_init = gen8_render_init,
@@ -272,10 +291,10 @@ static struct hw_codec_info chv_hw_codec_info = {
     .max_width = 4096,
     .max_height = 4096,
     .min_linear_wpitch = 64,
-    .min_linear_hpitch = 16,
+    .min_linear_hpitch = 4,
 
     .h264_mvc_dec_profiles = (VA_PROFILE_MASK(H264StereoHigh) |
-                              VA_PROFILE_MASK(H264MultiviewHigh)),
+    VA_PROFILE_MASK(H264MultiviewHigh)),
     .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS,
     .jpeg_dec_chroma_formats = EXTRA_JPEG_DEC_CHROMA_FORMATS,
     .jpeg_enc_chroma_formats = EXTRA_JPEG_ENC_CHROMA_FORMATS,
@@ -296,6 +315,9 @@ static struct hw_codec_info chv_hw_codec_info = {
     .has_vp8_decoding = 1,
     .has_vp8_encoding = 1,
     .has_h264_mvc_encoding = 1,
+    .has_hevc_decoding = 1,
+
+    .h264_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR,
 
     .num_filters = 5,
     .filters = {
@@ -307,26 +329,283 @@ static struct hw_codec_info chv_hw_codec_info = {
     },
 };
 
-extern struct hw_context *gen9_dec_hw_context_init(VADriverContextP, struct object_config *);
+static void gen9_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *codec_info);
+
 extern struct hw_context *gen9_enc_hw_context_init(VADriverContextP, struct object_config *);
 extern void gen9_post_processing_context_init(VADriverContextP, void *, struct intel_batchbuffer *);
+extern void gen9_max_resolution(struct i965_driver_data *, struct object_config *, int *, int *);
 static struct hw_codec_info skl_hw_codec_info = {
     .dec_hw_context_init = gen9_dec_hw_context_init,
     .enc_hw_context_init = gen9_enc_hw_context_init,
     .proc_hw_context_init = gen75_proc_context_init,
     .render_init = gen9_render_init,
     .post_processing_context_init = gen9_post_processing_context_init,
+    .max_resolution = gen9_max_resolution,
+    .preinit_hw_codec = gen9_hw_codec_preinit,
+
+    .max_width = 4096,  /* default. See max_resolution */
+    .max_height = 4096, /* default. See max_resolution */
+    .min_linear_wpitch = 64,
+    .min_linear_hpitch = 4,
+
+    .h264_mvc_dec_profiles = (VA_PROFILE_MASK(H264StereoHigh) |
+    VA_PROFILE_MASK(H264MultiviewHigh)),
+    .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS,
+    .jpeg_dec_chroma_formats = EXTRA_JPEG_DEC_CHROMA_FORMATS,
+    .jpeg_enc_chroma_formats = EXTRA_JPEG_ENC_CHROMA_FORMATS,
+
+    .has_mpeg2_decoding = 1,
+    .has_mpeg2_encoding = 1,
+    .has_h264_decoding = 1,
+    .has_h264_encoding = 1,
+    .has_vc1_decoding = 1,
+    .has_jpeg_decoding = 1,
+    .has_jpeg_encoding = 1,
+    .has_vpp = 1,
+    .has_accelerated_getimage = 1,
+    .has_accelerated_putimage = 1,
+    .has_tiled_surface = 1,
+    .has_di_motion_adptive = 1,
+    .has_di_motion_compensated = 1,
+    .has_vp8_decoding = 1,
+    .has_vp8_encoding = 1,
+    .has_h264_mvc_encoding = 1,
+    .has_hevc_decoding = 1,
+    .has_hevc_encoding = 1,
+    .has_lp_h264_encoding = 1,
+    .has_fei_h264_encoding = 1,
+    .has_h264_preenc = 1,
+
+    .lp_h264_brc_mode = VA_RC_CQP,
+    .h264_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR | VA_RC_MB,
+
+    .num_filters = 5,
+    .filters = {
+        { VAProcFilterNoiseReduction, I965_RING_VEBOX },
+        { VAProcFilterDeinterlacing, I965_RING_VEBOX },
+        { VAProcFilterSharpening, I965_RING_NULL }, /* need to rebuild the shader for BDW */
+        { VAProcFilterColorBalance, I965_RING_VEBOX},
+        { VAProcFilterSkinToneEnhancement, I965_RING_VEBOX},
+    },
+};
+
+
+static struct hw_codec_info bxt_hw_codec_info = {
+    .dec_hw_context_init = gen9_dec_hw_context_init,
+    .enc_hw_context_init = gen9_enc_hw_context_init,
+    .proc_hw_context_init = gen75_proc_context_init,
+    .render_init = gen9_render_init,
+    .post_processing_context_init = gen9_post_processing_context_init,
+    .max_resolution = gen9_max_resolution,
+    .preinit_hw_codec = gen9_hw_codec_preinit,
+
+    .max_width = 4096,  /* default. See max_resolution */
+    .max_height = 4096, /* default. See max_resolution */
+    .min_linear_wpitch = 64,
+    .min_linear_hpitch = 4,
+
+    .h264_mvc_dec_profiles = (VA_PROFILE_MASK(H264StereoHigh) |
+    VA_PROFILE_MASK(H264MultiviewHigh)),
+    .vp9_dec_profiles = VP9_PROFILE_MASK(0),
+
+    .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS,
+    .jpeg_dec_chroma_formats = EXTRA_JPEG_DEC_CHROMA_FORMATS,
+    .jpeg_enc_chroma_formats = EXTRA_JPEG_ENC_CHROMA_FORMATS,
+    .hevc_dec_chroma_formats = EXTRA_HEVC_DEC_CHROMA_FORMATS,
+
+    .has_mpeg2_decoding = 1,
+    .has_h264_decoding = 1,
+    .has_h264_encoding = 1,
+    .has_vc1_decoding = 1,
+    .has_jpeg_decoding = 1,
+    .has_jpeg_encoding = 1,
+    .has_vpp = 1,
+    .has_accelerated_getimage = 1,
+    .has_accelerated_putimage = 1,
+    .has_tiled_surface = 1,
+    .has_di_motion_adptive = 1,
+    .has_di_motion_compensated = 1,
+    .has_vp8_decoding = 1,
+    .has_vp8_encoding = 1,
+    .has_h264_mvc_encoding = 1,
+    .has_hevc_decoding = 1,
+    .has_hevc_encoding = 1,
+    .has_hevc10_decoding = 1,
+    .has_vp9_decoding = 1,
+    .has_vpp_p010 = 1,
+    .has_lp_h264_encoding = 1,
+
+    .lp_h264_brc_mode = VA_RC_CQP,
+    .h264_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR | VA_RC_MB,
+
+    .num_filters = 5,
+    .filters = {
+        { VAProcFilterNoiseReduction, I965_RING_VEBOX },
+        { VAProcFilterDeinterlacing, I965_RING_VEBOX },
+        { VAProcFilterSharpening, I965_RING_NULL },
+        { VAProcFilterColorBalance, I965_RING_VEBOX},
+        { VAProcFilterSkinToneEnhancement, I965_RING_VEBOX},
+    },
+};
+
+static struct hw_codec_info kbl_hw_codec_info = {
+    .dec_hw_context_init = gen9_dec_hw_context_init,
+    .enc_hw_context_init = gen9_enc_hw_context_init,
+    .proc_hw_context_init = gen75_proc_context_init,
+    .render_init = gen9_render_init,
+    .post_processing_context_init = gen9_post_processing_context_init,
+    .max_resolution = gen9_max_resolution,
+    .preinit_hw_codec = gen9_hw_codec_preinit,
+
+    .max_width = 4096,   /* default. See max_resolution */
+    .max_height = 4096,  /* default. See max_resolution */
+    .min_linear_wpitch = 64,
+    .min_linear_hpitch = 4,
+
+    .h264_mvc_dec_profiles = (VA_PROFILE_MASK(H264StereoHigh) |
+    VA_PROFILE_MASK(H264MultiviewHigh)),
+    .vp9_dec_profiles = VP9_PROFILE_MASK(0) |
+    VP9_PROFILE_MASK(2),
+    .vp9_enc_profiles = VP9_PROFILE_MASK(0),
+
+    .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS,
+    .jpeg_dec_chroma_formats = EXTRA_JPEG_DEC_CHROMA_FORMATS,
+    .jpeg_enc_chroma_formats = EXTRA_JPEG_ENC_CHROMA_FORMATS,
+    .hevc_dec_chroma_formats = EXTRA_HEVC_DEC_CHROMA_FORMATS,
+    .vp9_dec_chroma_formats = EXTRA_VP9_DEC_CHROMA_FORMATS,
+
+    .has_mpeg2_decoding = 1,
+    .has_mpeg2_encoding = 1,
+    .has_h264_decoding = 1,
+    .has_h264_encoding = 1,
+    .has_vc1_decoding = 1,
+    .has_jpeg_decoding = 1,
+    .has_jpeg_encoding = 1,
+    .has_vpp = 1,
+    .has_accelerated_getimage = 1,
+    .has_accelerated_putimage = 1,
+    .has_tiled_surface = 1,
+    .has_di_motion_adptive = 1,
+    .has_di_motion_compensated = 1,
+    .has_vp8_decoding = 1,
+    .has_vp8_encoding = 1,
+    .has_h264_mvc_encoding = 1,
+    .has_hevc_decoding = 1,
+    .has_hevc_encoding = 1,
+    .has_hevc10_encoding = 1,
+    .has_hevc10_decoding = 1,
+    .has_vp9_decoding = 1,
+    .has_vpp_p010 = 1,
+    .has_vp9_encoding = 1,
+    .has_lp_h264_encoding = 1,
+
+    .lp_h264_brc_mode = VA_RC_CQP,
+    .h264_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR | VA_RC_MB,
+
+    .vp9_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR,
+
+    .num_filters = 5,
+    .filters = {
+        { VAProcFilterNoiseReduction, I965_RING_VEBOX },
+        { VAProcFilterDeinterlacing, I965_RING_VEBOX },
+        { VAProcFilterSharpening, I965_RING_NULL },
+        { VAProcFilterColorBalance, I965_RING_VEBOX},
+        { VAProcFilterSkinToneEnhancement, I965_RING_VEBOX},
+    },
+};
+
+static struct hw_codec_info glk_hw_codec_info = {
+    .dec_hw_context_init = gen9_dec_hw_context_init,
+    .enc_hw_context_init = gen9_enc_hw_context_init,
+    .proc_hw_context_init = gen75_proc_context_init,
+    .render_init = gen9_render_init,
+    .post_processing_context_init = gen9_post_processing_context_init,
+
+    .max_resolution = gen9_max_resolution,
+    .preinit_hw_codec = gen9_hw_codec_preinit,
 
     .max_width = 4096,
     .max_height = 4096,
     .min_linear_wpitch = 64,
+    .min_linear_hpitch = 4,
+
+    .h264_mvc_dec_profiles = (VA_PROFILE_MASK(H264StereoHigh) |
+    VA_PROFILE_MASK(H264MultiviewHigh)),
+    .vp9_dec_profiles = VP9_PROFILE_MASK(0) |
+    VP9_PROFILE_MASK(2),
+
+    .vp9_enc_profiles = VP9_PROFILE_MASK(0),
+
+    .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS,
+    .jpeg_dec_chroma_formats = EXTRA_JPEG_DEC_CHROMA_FORMATS,
+    .jpeg_enc_chroma_formats = EXTRA_JPEG_ENC_CHROMA_FORMATS,
+    .hevc_dec_chroma_formats = EXTRA_HEVC_DEC_CHROMA_FORMATS,
+    .vp9_dec_chroma_formats = EXTRA_VP9_DEC_CHROMA_FORMATS,
+
+    .has_mpeg2_decoding = 1,
+    .has_h264_decoding = 1,
+    .has_h264_encoding = 1,
+    .has_vc1_decoding = 1,
+    .has_jpeg_decoding = 1,
+    .has_jpeg_encoding = 1,
+    .has_vpp = 1,
+    .has_accelerated_getimage = 1,
+    .has_accelerated_putimage = 1,
+    .has_tiled_surface = 1,
+    .has_di_motion_adptive = 1,
+    .has_di_motion_compensated = 1,
+    .has_vp8_decoding = 1,
+    .has_vp8_encoding = 1,
+    .has_h264_mvc_encoding = 1,
+    .has_hevc_decoding = 1,
+    .has_hevc_encoding = 1,
+    .has_hevc10_decoding = 1,
+    .has_hevc10_encoding = 1,
+    .has_vp9_decoding = 1,
+    .has_vpp_p010 = 1,
+    .has_vp9_encoding = 1,
+    .has_lp_h264_encoding = 1,
+
+    .lp_h264_brc_mode = VA_RC_CQP,
+    .h264_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR | VA_RC_MB,
+
+    .vp9_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR,
+
+    .num_filters = 5,
+    .filters = {
+        { VAProcFilterNoiseReduction, I965_RING_VEBOX },
+        { VAProcFilterDeinterlacing, I965_RING_VEBOX },
+        { VAProcFilterSharpening, I965_RING_NULL },
+        { VAProcFilterColorBalance, I965_RING_VEBOX},
+        { VAProcFilterSkinToneEnhancement, I965_RING_VEBOX},
+    },
+};
+
+static struct hw_codec_info cfl_hw_codec_info = {
+    .dec_hw_context_init = gen9_dec_hw_context_init,
+    .enc_hw_context_init = gen9_enc_hw_context_init,
+    .proc_hw_context_init = gen75_proc_context_init,
+    .render_init = gen9_render_init,
+    .post_processing_context_init = gen9_post_processing_context_init,
+    .max_resolution = gen9_max_resolution,
+    .preinit_hw_codec = gen9_hw_codec_preinit,
+
+    .max_width = 4096,   /* default. See max_resolution */
+    .max_height = 4096,  /* default. See max_resolution */
+    .min_linear_wpitch = 64,
     .min_linear_hpitch = 16,
 
     .h264_mvc_dec_profiles = (VA_PROFILE_MASK(H264StereoHigh) |
-                              VA_PROFILE_MASK(H264MultiviewHigh)),
+    VA_PROFILE_MASK(H264MultiviewHigh)),
+    .vp9_dec_profiles = VP9_PROFILE_MASK(0) |
+    VP9_PROFILE_MASK(2),
+    .vp9_enc_profiles = VP9_PROFILE_MASK(0),
+
     .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS,
     .jpeg_dec_chroma_formats = EXTRA_JPEG_DEC_CHROMA_FORMATS,
     .jpeg_enc_chroma_formats = EXTRA_JPEG_ENC_CHROMA_FORMATS,
+    .hevc_dec_chroma_formats = EXTRA_HEVC_DEC_CHROMA_FORMATS,
+    .vp9_dec_chroma_formats = EXTRA_VP9_DEC_CHROMA_FORMATS,
 
     .has_mpeg2_decoding = 1,
     .has_mpeg2_encoding = 1,
@@ -345,12 +624,89 @@ static struct hw_codec_info skl_hw_codec_info = {
     .has_vp8_encoding = 1,
     .has_h264_mvc_encoding = 1,
     .has_hevc_decoding = 1,
+    .has_hevc_encoding = 1,
+    .has_hevc10_encoding = 1,
+    .has_hevc10_decoding = 1,
+    .has_vp9_decoding = 1,
+    .has_vpp_p010 = 1,
+    .has_vp9_encoding = 1,
+    .has_lp_h264_encoding = 1,
+
+    .lp_h264_brc_mode = VA_RC_CQP,
+    .h264_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR | VA_RC_MB,
+
+    .vp9_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR,
 
     .num_filters = 5,
     .filters = {
         { VAProcFilterNoiseReduction, I965_RING_VEBOX },
         { VAProcFilterDeinterlacing, I965_RING_VEBOX },
-        { VAProcFilterSharpening, I965_RING_NULL }, /* need to rebuild the shader for BDW */
+        { VAProcFilterSharpening, I965_RING_NULL },
+        { VAProcFilterColorBalance, I965_RING_VEBOX},
+        { VAProcFilterSkinToneEnhancement, I965_RING_VEBOX},
+    },
+};
+
+static struct hw_codec_info cnl_hw_codec_info = {
+    .dec_hw_context_init = gen9_dec_hw_context_init,
+    .enc_hw_context_init = gen9_enc_hw_context_init,
+    .proc_hw_context_init = gen75_proc_context_init,
+    .render_init = gen9_render_init,
+    .post_processing_context_init = gen9_post_processing_context_init,
+    .max_resolution = gen9_max_resolution,
+    .preinit_hw_codec = gen9_hw_codec_preinit,
+
+    .max_width = 4096,   /* default. See max_resolution */
+    .max_height = 4096,  /* default. See max_resolution */
+    .min_linear_wpitch = 64,
+    .min_linear_hpitch = 16,
+
+    .h264_mvc_dec_profiles = (VA_PROFILE_MASK(H264StereoHigh) | VA_PROFILE_MASK(H264MultiviewHigh)),
+    .vp9_dec_profiles = VP9_PROFILE_MASK(0) | VP9_PROFILE_MASK(2),
+    .vp9_enc_profiles = VP9_PROFILE_MASK(0),
+
+    .h264_dec_chroma_formats = EXTRA_H264_DEC_CHROMA_FORMATS,
+    .jpeg_dec_chroma_formats = EXTRA_JPEG_DEC_CHROMA_FORMATS,
+    .jpeg_enc_chroma_formats = EXTRA_JPEG_ENC_CHROMA_FORMATS,
+    .hevc_dec_chroma_formats = EXTRA_HEVC_DEC_CHROMA_FORMATS,
+    .vp9_dec_chroma_formats = EXTRA_VP9_DEC_CHROMA_FORMATS,
+
+    .has_mpeg2_decoding = 1,
+    .has_mpeg2_encoding = 1,
+    .has_h264_decoding = 1,
+    .has_h264_encoding = 1,
+    .has_vc1_decoding = 1,
+    .has_jpeg_decoding = 1,
+    .has_jpeg_encoding = 1,
+    .has_vpp = 1,
+    .has_accelerated_getimage = 1,
+    .has_accelerated_putimage = 1,
+    .has_tiled_surface = 1,
+    .has_di_motion_adptive = 1,
+    .has_di_motion_compensated = 1,
+    .has_vp8_decoding = 1,
+    .has_vp8_encoding = 1,
+    .has_h264_mvc_encoding = 1,
+    .has_hevc_decoding = 1,
+    .has_hevc_encoding = 1,
+    .has_hevc10_decoding = 1,
+    .has_hevc10_encoding = 1,
+    .has_vp9_decoding = 1,
+    .has_vpp_p010 = 1,
+    .has_vp9_encoding = 1,
+    .has_lp_h264_encoding = 1,
+    .has_lp_vp9_encoding = 1,
+
+    .lp_h264_brc_mode = VA_RC_CQP,
+    .h264_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR | VA_RC_MB,
+
+    .vp9_brc_mode = VA_RC_CQP | VA_RC_CBR | VA_RC_VBR,
+
+    .num_filters = 5,
+    .filters = {
+        { VAProcFilterNoiseReduction, I965_RING_VEBOX },
+        { VAProcFilterDeinterlacing, I965_RING_VEBOX },
+        { VAProcFilterSharpening, I965_RING_NULL },
         { VAProcFilterColorBalance, I965_RING_VEBOX},
         { VAProcFilterSkinToneEnhancement, I965_RING_VEBOX},
     },
@@ -482,6 +838,50 @@ static const struct intel_device_info skl_device_info = {
 
     .urb_size = 4096,
     .max_wm_threads = 64,       /* per PSD */
+
+    .is_skylake = 1,
+};
+
+static const struct intel_device_info bxt_device_info = {
+    .gen = 9,
+
+    .urb_size = 4096,
+    .max_wm_threads = 64,       /* per PSD */
+    .is_broxton = 1,
+};
+
+static const struct intel_device_info kbl_device_info = {
+    .gen = 9,
+
+    .urb_size = 4096,
+    .max_wm_threads = 64,       /* per PSD */
+
+    .is_kabylake = 1,
+};
+
+static const struct intel_device_info glk_device_info = {
+    .gen = 9,
+
+    .urb_size = 4096,
+    .max_wm_threads = 64,       /* per PSD */
+
+    .is_glklake = 1,
+};
+
+static const struct intel_device_info cfl_device_info = {
+    .gen = 9,
+
+    .urb_size = 4096,
+    .max_wm_threads = 64,       /* per PSD */
+
+    .is_cfllake = 1,
+};
+
+static const struct intel_device_info cnl_device_info = {
+    .gen = 10,
+
+    .urb_size = 4096,
+    .max_wm_threads = 64,       /* per PSD */
 };
 
 const struct intel_device_info *
@@ -497,10 +897,10 @@ i965_get_device_info(int devid)
 }
 
 static void cpuid(unsigned int op,
-                         uint32_t *eax, uint32_t *ebx,
-                         uint32_t *ecx, uint32_t *edx)
+                  uint32_t *eax, uint32_t *ebx,
+                  uint32_t *ecx, uint32_t *edx)
 {
-       __cpuid_count(op, 0, *eax, *ebx, *ecx, *edx);
+    __cpuid_count(op, 0, *eax, *ebx, *ecx, *edx);
 }
 
 /*
@@ -521,7 +921,7 @@ static int intel_driver_detect_cpustring(char *model_id)
 
     /* If the max extended CPUID info is less than 0x80000004, fail */
     if (rdata[0] < 0x80000004)
-       return -EINVAL;
+        return -EINVAL;
 
     /* obtain the CPUID string */
     cpuid(0x80000002, &rdata[0], &rdata[1], &rdata[2], &rdata[3]);
@@ -537,12 +937,12 @@ static int intel_driver_detect_cpustring(char *model_id)
  * It is captured by /proc/cpuinfo and the space character is stripped.
  */
 const static char *hsw_cpu_hook_list[] =  {
-"Intel(R)Pentium(R)3556U",
-"Intel(R)Pentium(R)3560Y",
-"Intel(R)Pentium(R)3550M",
-"Intel(R)Celeron(R)2980U",
-"Intel(R)Celeron(R)2955U",
-"Intel(R)Celeron(R)2950M",
+    "Intel(R)Pentium(R)3556U",
+    "Intel(R)Pentium(R)3560Y",
+    "Intel(R)Pentium(R)3550M",
+    "Intel(R)Celeron(R)2980U",
+    "Intel(R)Celeron(R)2955U",
+    "Intel(R)Celeron(R)2950M",
 };
 
 static void hsw_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *codec_info)
@@ -561,7 +961,7 @@ static void hsw_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *cod
     /* strip the cpufreq info */
     model_ptr = model_string;
     tmp_ptr = strstr(model_ptr, "@");
-   
+
     if (tmp_ptr)
         *tmp_ptr = '\0';
 
@@ -569,10 +969,10 @@ static void hsw_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *cod
     model_ptr = model_string;
     model_len = strlen(model_string);
     for (i = 0; i < model_len; i++) {
-         if (model_string[i] != ' ') {
-             *model_ptr = model_string[i];
-             model_ptr++;
-         }
+        if (model_string[i] != ' ') {
+            *model_ptr = model_string[i];
+            model_ptr++;
+        }
     }
     *model_ptr = '\0';
 
@@ -583,18 +983,18 @@ static void hsw_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *cod
         model_ptr = (char *)hsw_cpu_hook_list[i];
 
         if (strlen(model_ptr) != model_len)
-           continue;
+            continue;
 
         if (strncasecmp(model_string, model_ptr, model_len) == 0) {
             found = true;
             break;
-       }
+        }
     }
 
     if (found) {
-       codec_info->has_h264_encoding = 0;
-       codec_info->has_h264_mvc_encoding = 0;
-       codec_info->has_mpeg2_encoding = 0;
+        codec_info->has_h264_encoding = 0;
+        codec_info->has_h264_mvc_encoding = 0;
+        codec_info->has_mpeg2_encoding = 0;
     }
     return;
 }
@@ -604,8 +1004,8 @@ static void hsw_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *cod
  * It is captured by /proc/cpuinfo and the space character is stripped.
  */
 const static char *gen6_cpu_hook_list[] =  {
-"Intel(R)Celeron(R)CPU847",
-"Intel(R)Celeron(R)CPU867",
+    "Intel(R)Celeron(R)CPU847",
+    "Intel(R)Celeron(R)CPU867",
 };
 
 static void gen6_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *codec_info)
@@ -632,10 +1032,10 @@ static void gen6_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *co
     model_ptr = model_string;
     model_len = strlen(model_string);
     for (i = 0; i < model_len; i++) {
-         if (model_string[i] != ' ') {
-             *model_ptr = model_string[i];
-             model_ptr++;
-         }
+        if (model_string[i] != ' ') {
+            *model_ptr = model_string[i];
+            model_ptr++;
+        }
     }
     *model_ptr = '\0';
 
@@ -665,7 +1065,9 @@ static void gen6_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *co
  * It is captured by /proc/cpuinfo and the space character is stripped.
  */
 const static char *gen7_cpu_hook_list[] =  {
-"Intel(R)Celeron(R)CPU1007U",
+    "Intel(R)Celeron(R)CPU1007U",
+    "Intel(R)Celeron(R)CPU1037U",
+    "Intel(R)Pentium(R)CPUG2130",
 };
 
 static void gen7_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *codec_info)
@@ -692,10 +1094,10 @@ static void gen7_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *co
     model_ptr = model_string;
     model_len = strlen(model_string);
     for (i = 0; i < model_len; i++) {
-         if (model_string[i] != ' ') {
-             *model_ptr = model_string[i];
-             model_ptr++;
-         }
+        if (model_string[i] != ' ') {
+            *model_ptr = model_string[i];
+            model_ptr++;
+        }
     }
     *model_ptr = '\0';
 
@@ -711,7 +1113,7 @@ static void gen7_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *co
         if (strncasecmp(model_string, model_ptr, model_len) == 0) {
             found = true;
             break;
-       }
+        }
     }
 
     if (found) {
@@ -720,3 +1122,14 @@ static void gen7_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *co
     }
     return;
 }
+
+static void gen9_hw_codec_preinit(VADriverContextP ctx, struct hw_codec_info *codec_info)
+{
+    struct i965_driver_data *i965 = i965_driver_data(ctx);
+
+    if (i965->intel.has_huc && codec_info->has_lp_h264_encoding)
+        codec_info->lp_h264_brc_mode |= (VA_RC_CBR | VA_RC_VBR);
+
+    if (i965->intel.has_huc && codec_info->has_lp_vp9_encoding)
+        codec_info->lp_vp9_brc_mode |= (VA_RC_CQP | VA_RC_CBR | VA_RC_VBR);
+}