2 * Copyright @ 2017 Intel Corporation
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the
6 * "Software"), to deal in the Software without restriction, including
7 * without limitation the rights to use, copy, modify, merge, publish,
8 * distribute, sub license, and/or sell copies of the Software, and to
9 * permit persons to whom the Software is furnished to do so, subject to
10 * the following conditions:
12 * The above copyright notice and this permission notice (including the
13 * next paragraph) shall be included in all copies or substantial portions
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19 * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
20 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22 * SOFTWAR OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 * Pengfei Qu <Pengfei.qu@intel.com>
29 #ifndef I965_AVC_ENCODER_H
30 #define I965_AVC_ENCODER_H
32 #include "i965_encoder_common.h"
34 common structure and define
35 gen9_avc_surface structure
37 #define MAX_AVC_ENCODER_SURFACES 64
38 #define MAX_AVC_PAK_PASS_NUM 4
40 #define ENCODER_AVC_CONST_SURFACE_WIDTH 64
41 #define ENCODER_AVC_CONST_SURFACE_HEIGHT 44
42 #define WIDTH_IN_MACROBLOCKS(width) (ALIGN(width, 16) >> 4)
44 #define AVC_BRC_HISTORY_BUFFER_SIZE 864
45 #define AVC_BRC_CONSTANTSURFACE_SIZE 1664
46 #define AVC_ADAPTIVE_TX_DECISION_THRESHOLD 128
47 #define AVC_MB_TEXTURE_THRESHOLD 1024
48 #define AVC_SFD_COST_TABLE_BUFFER_SIZ 52
49 #define AVC_INVALID_ROUNDING_VALUE 255
51 struct gen9_mfx_avc_img_state {
54 uint32_t dword_length: 12;
56 uint32_t sub_opcode_b: 5;
57 uint32_t sub_opcode_a: 3;
58 uint32_t command_opcode: 3;
60 uint32_t command_type: 3;
67 uint32_t frame_size_in_mbs: 16; //minus1
72 uint32_t frame_width_in_mbs_minus1: 8; //minus1
74 uint32_t frame_height_in_mbs_minus1: 8; //minus1
80 uint32_t image_structure: 2;
81 uint32_t weighted_bipred_idc: 2;
82 uint32_t weighted_pred_flag: 1;
83 uint32_t brc_domain_rate_control_enable: 1;
85 uint32_t chroma_qp_offset: 5;
87 uint32_t second_chroma_qp_offset: 5;
92 uint32_t field_picture_flag: 1;
93 uint32_t mbaff_mode_active: 1;
94 uint32_t frame_mb_only_flag: 1;
95 uint32_t transform_8x8_idct_mode_flag: 1;
96 uint32_t direct_8x8_interface_flag: 1;
97 uint32_t constrained_intra_prediction_flag: 1;
98 uint32_t current_img_dispoable_flag: 1;
99 uint32_t entropy_coding_flag: 1;
100 uint32_t mb_mv_format_flag: 1;
102 uint32_t chroma_format_idc: 2;
103 uint32_t mv_unpacked_flag: 1;
104 uint32_t insert_test_flag: 1;
105 uint32_t load_slice_pointer_flag: 1;
106 uint32_t macroblock_stat_enable: 1;
107 uint32_t minimum_frame_size: 16;
111 uint32_t intra_mb_max_bit_flag: 1;
112 uint32_t inter_mb_max_bit_flag: 1;
113 uint32_t frame_size_over_flag: 1;
114 uint32_t frame_size_under_flag: 1;
116 uint32_t intra_mb_ipcm_flag: 1;
118 uint32_t mb_rate_ctrl_flag: 1;
119 uint32_t min_frame_size_units: 2;
120 uint32_t inter_mb_zero_cbp_flag: 1; //?change
122 uint32_t non_first_pass_flag: 1;
124 uint32_t aq_chroma_disable: 1;
125 uint32_t aq_rounding: 3;
126 uint32_t aq_enable: 1;
130 uint32_t intra_mb_max_size: 12;
132 uint32_t inter_mb_max_size: 12;
137 uint32_t vsl_top_mb_trans8x8_flag: 1;
142 uint32_t slice_delta_qp_max0: 8;
143 uint32_t slice_delta_qp_max1: 8;
144 uint32_t slice_delta_qp_max2: 8;
145 uint32_t slice_delta_qp_max3: 8;
149 uint32_t slice_delta_qp_min0: 8;
150 uint32_t slice_delta_qp_min1: 8;
151 uint32_t slice_delta_qp_min2: 8;
152 uint32_t slice_delta_qp_min3: 8;
156 uint32_t frame_bitrate_min: 14;
157 uint32_t frame_bitrate_min_unit_mode: 1;
158 uint32_t frame_bitrate_min_unit: 1;
159 uint32_t frame_bitrate_max: 14;
160 uint32_t frame_bitrate_max_unit_mode: 1;
161 uint32_t frame_bitrate_max_unit: 1;
165 uint32_t frame_bitrate_min_delta: 15;
167 uint32_t frame_bitrate_max_delta: 15;
168 uint32_t slice_tsats_streamout_enable: 1;
173 uint32_t mpeg2_old_mode_select: 1;
174 uint32_t vad_noa_mux_select: 1;
175 uint32_t vad_error_logic: 1;
177 uint32_t vmd_error_logic: 1;
182 uint32_t pic_qp_init_minus26: 8;
183 uint32_t pic_num_ref_idx_l0_active_minus1: 6;
185 uint32_t pic_num_ref_idx_l1_active_minus1: 6;
187 uint32_t num_ref_frames: 5;
188 uint32_t is_curr_pic_has_mmco5: 1;
193 uint32_t pic_order_present_flag: 1;
194 uint32_t delta_pic_order_always_zero_flag: 1;
195 uint32_t pic_order_cnt_type: 2;
197 uint32_t slice_group_map_type: 3;
198 uint32_t redundant_pic_cnt_present_flag: 1;
199 uint32_t num_slice_groups_minus1: 3;
200 uint32_t deblock_filter_ctrl_present_flag: 1;
201 uint32_t log2_max_frame_num_minus4: 8;
202 uint32_t log2_max_pic_order_cnt_lsb_minus4: 8;
206 uint32_t slice_group_change_rate: 16;
207 uint32_t curr_pic_frame_num: 16;
211 uint32_t current_frame_view_id: 10;
213 uint32_t max_view_idx_l0: 4;
215 uint32_t max_view_idx_l1: 4;
217 uint32_t inter_view_order_disable: 1;
221 uint32_t fqp: 3; // Must be zero for SKL
222 uint32_t fqp_offset: 3; // Must be zero for SKL
224 uint32_t ext_brc_dm_stat_en: 1; // Must be zero for SKL
226 uint32_t brc_dm_avg_mb_qp: 6; // Must be zero for SKL
231 uint32_t brc_domain_target_frame_size;
235 uint32_t threshold_size_in_bytes;
239 uint32_t target_slice_size_in_bytes;
244 the definition for encoder status
246 struct encoder_status {
247 uint32_t image_status_mask;
248 uint32_t image_status_ctrl;
249 uint32_t bs_byte_count_frame;
250 uint32_t bs_byte_count_frame_nh;
251 uint32_t mfc_qp_status_count;
252 uint32_t media_index;
255 struct encoder_status_buffer_internal {
257 uint32_t image_status_mask_offset;
258 uint32_t image_status_ctrl_offset;
259 uint32_t bs_byte_count_frame_offset;
260 uint32_t bs_byte_count_frame_nh_offset;
261 uint32_t mfc_qp_status_count_offset;
262 uint32_t media_index_offset;
264 uint32_t bs_byte_count_frame_reg_offset;
265 uint32_t bs_byte_count_frame_nh_reg_offset;
266 uint32_t image_status_mask_reg_offset;
267 uint32_t image_status_ctrl_reg_offset;
268 uint32_t mfc_qp_status_count_reg_offset;
269 uint32_t status_buffer_size;
270 uint32_t base_offset;
274 #define CLIP(x, min, max) \
276 (x) = (((x) > (max)) ? (max) : (((x) < (min)) ? (min) : (x))); \
279 typedef struct _kernel_header_ {
280 uint32_t reserved : 6;
281 uint32_t kernel_start_pointer : 26;
284 struct generic_search_path_delta {
285 uint8_t search_path_delta_x: 4;
286 uint8_t search_path_delta_y: 4;
289 struct scaling_param {
290 VASurfaceID curr_pic;
292 struct object_surface *input_surface;
293 struct object_surface *output_surface;
294 uint32_t input_frame_width;
295 uint32_t input_frame_height;
296 uint32_t output_frame_width;
297 uint32_t output_frame_height;
298 uint32_t vert_line_stride;
299 uint32_t vert_line_stride_offset;
300 bool scaling_out_use_16unorm_surf_fmt;
301 bool scaling_out_use_32unorm_surf_fmt;
302 bool mbv_proc_stat_enabled;
303 bool enable_mb_flatness_check;
304 bool enable_mb_variance_output;
305 bool enable_mb_pixel_average_output;
307 bool use_16x_scaling;
308 bool use_32x_scaling;
309 bool blk8x8_stat_enabled;
310 struct i965_gpe_resource *pres_mbv_proc_stat_buffer;
311 struct i965_gpe_resource *pres_flatness_check_surface;
314 struct avc_surface_param {
315 uint32_t frame_width;
316 uint32_t frame_height;
322 uint32_t ref_list_idx;
326 struct i965_gpe_context * gpe_context_brc_frame_update;
327 struct i965_gpe_context * gpe_context_mbenc;
331 uint32_t frame_width_in_mb;
332 uint32_t frame_height_in_mb;
333 uint32_t mbenc_i_frame_dist_in_use;
335 uint32_t roi_enabled;
336 uint32_t brc_enabled;
337 uint32_t slice_height;
338 uint32_t mb_const_data_buffer_in_use;
339 uint32_t mb_qp_buffer_in_use;
340 uint32_t mb_vproc_stats_enable;
343 struct gen9_surface_avc {
344 VADriverContextP ctx;
345 VASurfaceID scaled_4x_surface_id;
346 struct object_surface *scaled_4x_surface_obj;
347 VASurfaceID scaled_16x_surface_id;
348 struct object_surface *scaled_16x_surface_obj;
349 VASurfaceID scaled_32x_surface_id;
350 struct object_surface *scaled_32x_surface_obj;
352 //mv code and mv data
353 struct i965_gpe_resource res_mb_code_surface;
354 struct i965_gpe_resource res_mv_data_surface;
356 struct i965_gpe_resource res_ref_pic_select_surface;
358 /* FEI specific resources:
359 * res_mb_code_surface and res_mv_data_surface
360 * are already defined */
361 struct i965_gpe_resource res_fei_mb_cntrl_surface;
362 struct i965_gpe_resource res_fei_mv_predictor_surface;
363 struct i965_gpe_resource res_fei_vme_distortion_surface;
364 struct i965_gpe_resource res_fei_mb_qp_surface;
374 unsigned int qp_value;
375 int top_field_order_cnt;
378 typedef struct _gen9_avc_encoder_kernel_header {
381 // Quality mode for Frame/Field
382 kernel_header mbenc_quality_I;
383 kernel_header mbenc_quality_P;
384 kernel_header mbenc_quality_B;
385 // Normal mode for Frame/Field
386 kernel_header mbenc_normal_I;
387 kernel_header mbenc_normal_P;
388 kernel_header mbenc_normal_B;
389 // Performance modes for Frame/Field
390 kernel_header mbenc_performance_I;
391 kernel_header mbenc_performance_P;
392 kernel_header mbenc_performance_B;
393 // WiDi modes for Frame/Field
394 kernel_header mbenc_widi_I;
395 kernel_header mbenc_widi_P;
396 kernel_header mbenc_widi_B;
403 kernel_header ply_dscale_ply;
404 kernel_header ply_dscale_2f_ply_2f;
407 kernel_header frame_brc_init;
410 kernel_header frame_brc_update;
413 kernel_header frame_brc_reset;
415 // BRC I Frame Distortion
416 kernel_header frame_brc_i_dist;
419 kernel_header mb_brc_update;
422 kernel_header ply_2xdscale_ply;
423 kernel_header ply_2xdscale_2f_ply_2f;
425 //Weighted Prediction Kernel
428 // Static frame detection Kernel
429 kernel_header static_detection;
430 } gen9_avc_encoder_kernel_header;
432 /* this is the order in which sub-kernels are stored in the
433 * monolithic FEI media kernel */
434 typedef struct _gen9_avc_fei_encoder_kernel_header {
437 /* MBENC FEI kernels*/
438 kernel_header mbenc_i;
439 kernel_header mbenc_p;
440 kernel_header mbenc_b;
442 /* PreProcessing FEI kernel */
443 kernel_header preproc;
450 kernel_header ply_2xdscale_ply;
451 kernel_header ply_2xdscale_2f_ply_2f;
453 } gen9_avc_fei_encoder_kernel_header;
456 The definition for Scaling
458 typedef enum _gen9_avc_binding_table_offset_scaling {
459 GEN9_AVC_SCALING_FRAME_SRC_Y_INDEX = 0,
460 GEN9_AVC_SCALING_FRAME_DST_Y_INDEX = 1,
461 GEN9_AVC_SCALING_FRAME_MBVPROCSTATS_DST_INDEX = 4,
462 GEN9_AVC_SCALING_NUM_SURFACES = 6
463 } gen9_avc_binding_table_offset_scaling;
465 typedef struct _gen9_avc_scaling4x_curbe_data {
467 uint32_t input_picture_width : 16;
468 uint32_t input_picture_height : 16;
472 uint32_t input_y_bti;
476 uint32_t output_y_bti;
488 uint32_t flatness_threshold;
492 uint32_t enable_mb_flatness_check;
496 uint32_t enable_mb_variance_output;
500 uint32_t enable_mb_pixel_average_output;
508 uint32_t mbv_proc_stat_bti;
514 } gen9_avc_scaling4x_curbe_data;
516 typedef struct _gen9_avc_scaling2x_curbe_data {
518 uint32_t input_picture_width : 16;
519 uint32_t input_picture_height : 16;
523 uint32_t reserved1[7];
526 uint32_t input_y_bti;
530 uint32_t output_y_bti;
533 uint32_t reserved2[2];
534 } gen9_avc_scaling2x_curbe_data;
536 #define GEN9_AVC_KERNEL_SCALING_2X_IDX 0
537 #define GEN9_AVC_KERNEL_SCALING_4X_IDX 1
538 #define NUM_GEN9_AVC_KERNEL_SCALING 2
540 struct gen_avc_scaling_context {
541 struct i965_gpe_context gpe_contexts[NUM_GEN9_AVC_KERNEL_SCALING];
545 me structure and define
547 typedef enum _gen9_avc_binding_table_offset_me {
548 GEN9_AVC_ME_MV_DATA_SURFACE_INDEX = 0,
549 GEN9_AVC_16XME_MV_DATA_SURFACE_INDEX = 1,
550 GEN9_AVC_32XME_MV_DATA_SURFACE_INDEX = 1,
551 GEN9_AVC_ME_DISTORTION_SURFACE_INDEX = 2,
552 GEN9_AVC_ME_BRC_DISTORTION_INDEX = 3,
553 GEN9_AVC_ME_RESERVED0_INDEX = 4,
554 GEN9_AVC_ME_CURR_FOR_FWD_REF_INDEX = 5,
555 GEN9_AVC_ME_FWD_REF_IDX0_INDEX = 6,
556 GEN9_AVC_ME_RESERVED1_INDEX = 7,
557 GEN9_AVC_ME_FWD_REF_IDX1_INDEX = 8,
558 GEN9_AVC_ME_RESERVED2_INDEX = 9,
559 GEN9_AVC_ME_FWD_REF_IDX2_INDEX = 10,
560 GEN9_AVC_ME_RESERVED3_INDEX = 11,
561 GEN9_AVC_ME_FWD_REF_IDX3_INDEX = 12,
562 GEN9_AVC_ME_RESERVED4_INDEX = 13,
563 GEN9_AVC_ME_FWD_REF_IDX4_INDEX = 14,
564 GEN9_AVC_ME_RESERVED5_INDEX = 15,
565 GEN9_AVC_ME_FWD_REF_IDX5_INDEX = 16,
566 GEN9_AVC_ME_RESERVED6_INDEX = 17,
567 GEN9_AVC_ME_FWD_REF_IDX6_INDEX = 18,
568 GEN9_AVC_ME_RESERVED7_INDEX = 19,
569 GEN9_AVC_ME_FWD_REF_IDX7_INDEX = 20,
570 GEN9_AVC_ME_RESERVED8_INDEX = 21,
571 GEN9_AVC_ME_CURR_FOR_BWD_REF_INDEX = 22,
572 GEN9_AVC_ME_BWD_REF_IDX0_INDEX = 23,
573 GEN9_AVC_ME_RESERVED9_INDEX = 24,
574 GEN9_AVC_ME_BWD_REF_IDX1_INDEX = 25,
575 GEN9_AVC_ME_VDENC_STREAMIN_INDEX = 26,
576 GEN9_AVC_ME_NUM_SURFACES_INDEX = 27
577 } gen9_avc_binding_table_offset_me;
579 typedef struct _gen9_avc_me_curbe_data {
581 uint32_t skip_mode_enable: 1;
582 uint32_t adaptive_enable: 1;
583 uint32_t bi_mix_dis: 1;
584 uint32_t reserved0: 2;
585 uint32_t early_ime_success_enable: 1;
586 uint32_t reserved1: 1;
587 uint32_t t8x8_flag_for_inter_enable: 1;
588 uint32_t reserved2: 16;
589 uint32_t early_ime_stop: 8;
593 uint32_t max_num_mvs: 6;
594 uint32_t reserved0: 10;
595 uint32_t bi_weight: 6;
596 uint32_t reserved1: 6;
597 uint32_t uni_mix_disable: 1;
598 uint32_t reserved2: 3;
602 uint32_t max_len_sp: 8;
603 uint32_t max_num_su: 8;
604 uint32_t reserved0: 16;
608 uint32_t src_size: 2;
609 uint32_t reserved0: 2;
610 uint32_t mb_type_remap: 2;
611 uint32_t src_access: 1;
612 uint32_t ref_access: 1;
613 uint32_t search_ctrl: 3;
614 uint32_t dual_search_path_option: 1;
615 uint32_t sub_pel_mode: 2;
616 uint32_t skip_type: 1;
617 uint32_t disable_field_cache_allocation: 1;
618 uint32_t inter_chroma_mode: 1;
619 uint32_t ft_enable: 1;
620 uint32_t bme_disable_fbr: 1;
621 uint32_t block_based_skip_enable: 1;
622 uint32_t inter_sad: 2;
623 uint32_t intra_sad: 2;
624 uint32_t sub_mb_part_mask: 7;
625 uint32_t reserved1: 1;
629 uint32_t reserved0: 8;
630 uint32_t picture_height_minus1: 8;
631 uint32_t picture_width: 8;
632 uint32_t reserved1: 8;
636 uint32_t reserved0: 8;
637 uint32_t qp_prime_y: 8;
638 uint32_t ref_width: 8;
639 uint32_t ref_height: 8;
643 uint32_t reserved0: 3;
644 uint32_t write_distortions: 1;
645 uint32_t use_mv_from_prev_step: 1;
646 uint32_t reserved1: 3;
647 uint32_t super_combine_dist: 8;
648 uint32_t max_vmvr: 16;
652 uint32_t reserved0: 16;
653 uint32_t mv_cost_scale_factor: 2;
654 uint32_t bilinear_enable: 1;
655 uint32_t src_field_polarity: 1;
656 uint32_t weightedsad_harr: 1;
657 uint32_t ac_only_haar: 1;
658 uint32_t ref_id_cost_mode: 1;
659 uint32_t reserved1: 1;
660 uint32_t skip_center_mask: 8;
664 uint32_t mode_0_cost: 8;
665 uint32_t mode_1_cost: 8;
666 uint32_t mode_2_cost: 8;
667 uint32_t mode_3_cost: 8;
671 uint32_t mode_4_cost: 8;
672 uint32_t mode_5_cost: 8;
673 uint32_t mode_6_cost: 8;
674 uint32_t mode_7_cost: 8;
678 uint32_t mode_8_cost: 8;
679 uint32_t mode_9_cost: 8;
680 uint32_t ref_id_cost: 8;
681 uint32_t chroma_intra_mode_cost: 8;
685 uint32_t mv_0_cost: 8;
686 uint32_t mv_1_cost: 8;
687 uint32_t mv_2_cost: 8;
688 uint32_t mv_3_cost: 8;
692 uint32_t mv_4_cost: 8;
693 uint32_t mv_5_cost: 8;
694 uint32_t mv_6_cost: 8;
695 uint32_t mv_7_cost: 8;
699 uint32_t num_ref_idx_l0_minus1: 8;
700 uint32_t num_ref_idx_l1_minus1: 8;
701 uint32_t ref_streamin_cost: 8;
702 uint32_t roi_enable: 3;
703 uint32_t reserved0: 5;
707 uint32_t l0_ref_pic_polarity_bits: 8;
708 uint32_t l1_ref_pic_polarity_bits: 2;
709 uint32_t reserved: 22;
713 uint32_t prev_mv_read_pos_factor : 8;
714 uint32_t mv_shift_factor : 8;
715 uint32_t reserved: 16;
719 struct generic_search_path_delta sp_delta_0;
720 struct generic_search_path_delta sp_delta_1;
721 struct generic_search_path_delta sp_delta_2;
722 struct generic_search_path_delta sp_delta_3;
726 struct generic_search_path_delta sp_delta_4;
727 struct generic_search_path_delta sp_delta_5;
728 struct generic_search_path_delta sp_delta_6;
729 struct generic_search_path_delta sp_delta_7;
733 struct generic_search_path_delta sp_delta_8;
734 struct generic_search_path_delta sp_delta_9;
735 struct generic_search_path_delta sp_delta_10;
736 struct generic_search_path_delta sp_delta_11;
740 struct generic_search_path_delta sp_delta_12;
741 struct generic_search_path_delta sp_delta_13;
742 struct generic_search_path_delta sp_delta_14;
743 struct generic_search_path_delta sp_delta_15;
747 struct generic_search_path_delta sp_delta_16;
748 struct generic_search_path_delta sp_delta_17;
749 struct generic_search_path_delta sp_delta_18;
750 struct generic_search_path_delta sp_delta_19;
754 struct generic_search_path_delta sp_delta_20;
755 struct generic_search_path_delta sp_delta_21;
756 struct generic_search_path_delta sp_delta_22;
757 struct generic_search_path_delta sp_delta_23;
761 struct generic_search_path_delta sp_delta_24;
762 struct generic_search_path_delta sp_delta_25;
763 struct generic_search_path_delta sp_delta_26;
764 struct generic_search_path_delta sp_delta_27;
768 struct generic_search_path_delta sp_delta_28;
769 struct generic_search_path_delta sp_delta_29;
770 struct generic_search_path_delta sp_delta_30;
771 struct generic_search_path_delta sp_delta_31;
775 struct generic_search_path_delta sp_delta_32;
776 struct generic_search_path_delta sp_delta_33;
777 struct generic_search_path_delta sp_delta_34;
778 struct generic_search_path_delta sp_delta_35;
782 struct generic_search_path_delta sp_delta_36;
783 struct generic_search_path_delta sp_delta_37;
784 struct generic_search_path_delta sp_delta_38;
785 struct generic_search_path_delta sp_delta_39;
789 struct generic_search_path_delta sp_delta_40;
790 struct generic_search_path_delta sp_delta_41;
791 struct generic_search_path_delta sp_delta_42;
792 struct generic_search_path_delta sp_delta_43;
796 struct generic_search_path_delta sp_delta_44;
797 struct generic_search_path_delta sp_delta_45;
798 struct generic_search_path_delta sp_delta_46;
799 struct generic_search_path_delta sp_delta_47;
803 struct generic_search_path_delta sp_delta_48;
804 struct generic_search_path_delta sp_delta_49;
805 struct generic_search_path_delta sp_delta_50;
806 struct generic_search_path_delta sp_delta_51;
810 struct generic_search_path_delta sp_delta_52;
811 struct generic_search_path_delta sp_delta_53;
812 struct generic_search_path_delta sp_delta_54;
813 struct generic_search_path_delta sp_delta_55;
817 uint32_t actual_mb_width: 16;
818 uint32_t actual_mb_height: 16;
826 uint32_t _4x_memv_output_data_surf_index;
830 uint32_t _16x_32x_memv_input_data_surf_index;
834 uint32_t _4x_me_output_dist_surf_index;
838 uint32_t _4x_me_output_brc_dist_surf_index;
842 uint32_t vme_fwd_inter_pred_surf_index;
846 uint32_t vme_bdw_inter_pred_surf_index;
853 } gen9_avc_me_curbe_data;
855 #define GEN9_AVC_KERNEL_ME_P_IDX 0
856 #define GEN9_AVC_KERNEL_ME_B_IDX 1
857 #define NUM_GEN9_AVC_KERNEL_ME 2
859 struct gen_avc_me_context {
860 struct i965_gpe_context gpe_contexts[NUM_GEN9_AVC_KERNEL_ME];
864 frame/mb brc structure and define
866 typedef enum _gen9_avc_binding_table_offset_brc_init_reset {
867 GEN9_AVC_BRC_INIT_RESET_HISTORY_INDEX = 0,
868 GEN9_AVC_BRC_INIT_RESET_DISTORTION_INDEX,
869 GEN9_AVC_BRC_INIT_RESET_NUM_SURFACES
870 } gen9_avc_binding_table_offset_brc_init_reset;
872 typedef struct _gen9_avc_brc_init_reset_curbe_data {
874 uint32_t profile_level_max_frame;
878 uint32_t init_buf_full_in_bits;
882 uint32_t buf_size_in_bits;
886 uint32_t average_bit_rate;
890 uint32_t max_bit_rate;
894 uint32_t min_bit_rate;
898 uint32_t frame_rate_m;
902 uint32_t frame_rate_d;
906 uint32_t brc_flag: 16;
912 uint32_t frame_width_in_bytes: 16;
916 uint32_t frame_height_in_bytes: 16;
917 uint32_t avbr_accuracy: 16;
921 uint32_t avbr_convergence: 16;
927 uint32_t no_slices: 16;
931 uint32_t instant_rate_threshold_0_p: 8;
932 uint32_t instant_rate_threshold_1_p: 8;
933 uint32_t instant_rate_threshold_2_p: 8;
934 uint32_t instant_rate_threshold_3_p: 8;
938 uint32_t instant_rate_threshold_0_b: 8;
939 uint32_t instant_rate_threshold_1_b: 8;
940 uint32_t instant_rate_threshold_2_b: 8;
941 uint32_t instant_rate_threshold_3_b: 8;
945 uint32_t instant_rate_threshold_0_i: 8;
946 uint32_t instant_rate_threshold_1_i: 8;
947 uint32_t instant_rate_threshold_2_i: 8;
948 uint32_t instant_rate_threshold_3_i: 8;
952 uint32_t deviation_threshold_0_pand_b: 8;
953 uint32_t deviation_threshold_1_pand_b: 8;
954 uint32_t deviation_threshold_2_pand_b: 8;
955 uint32_t deviation_threshold_3_pand_b: 8;
959 uint32_t deviation_threshold_4_pand_b: 8;
960 uint32_t deviation_threshold_5_pand_b: 8;
961 uint32_t deviation_threshold_6_pand_b: 8;
962 uint32_t deviation_threshold_7_pand_b: 8;
966 uint32_t deviation_threshold_0_vbr: 8;
967 uint32_t deviation_threshold_1_vbr: 8;
968 uint32_t deviation_threshold_2_vbr: 8;
969 uint32_t deviation_threshold_3_vbr: 8;
973 uint32_t deviation_threshold_4_vbr: 8;
974 uint32_t deviation_threshold_5_vbr: 8;
975 uint32_t deviation_threshold_6_vbr: 8;
976 uint32_t deviation_threshold_7_vbr: 8;
980 uint32_t deviation_threshold_0_i: 8;
981 uint32_t deviation_threshold_1_i: 8;
982 uint32_t deviation_threshold_2_i: 8;
983 uint32_t deviation_threshold_3_i: 8;
987 uint32_t deviation_threshold_4_i: 8;
988 uint32_t deviation_threshold_5_i: 8;
989 uint32_t deviation_threshold_6_i: 8;
990 uint32_t deviation_threshold_7_i: 8;
994 uint32_t initial_qp_i: 8;
995 uint32_t initial_qp_p: 8;
996 uint32_t initial_qp_b: 8;
997 uint32_t sliding_window_size: 8;
1004 } gen9_avc_brc_init_reset_curbe_data;
1006 typedef enum _gen9_avc_binding_table_offset_frame_brc_update {
1007 GEN9_AVC_FRAME_BRC_UPDATE_HISTORY_INDEX = 0,
1008 GEN9_AVC_FRAME_BRC_UPDATE_PAK_STATISTICS_OUTPUT_INDEX = 1,
1009 GEN9_AVC_FRAME_BRC_UPDATE_IMAGE_STATE_READ_INDEX = 2,
1010 GEN9_AVC_FRAME_BRC_UPDATE_IMAGE_STATE_WRITE_INDEX = 3,
1011 GEN9_AVC_FRAME_BRC_UPDATE_MBENC_CURBE_READ_INDEX = 4,
1012 GEN9_AVC_FRAME_BRC_UPDATE_MBENC_CURBE_WRITE_INDEX = 5,
1013 GEN9_AVC_FRAME_BRC_UPDATE_DISTORTION_INDEX = 6,
1014 GEN9_AVC_FRAME_BRC_UPDATE_CONSTANT_DATA_INDEX = 7,
1015 GEN9_AVC_FRAME_BRC_UPDATE_MB_STATUS_INDEX = 8,
1016 GEN9_AVC_FRAME_BRC_UPDATE_NUM_SURFACES_INDEX = 9
1017 } gen9_avc_binding_table_offset_frame_brc_update;
1019 typedef struct _gen9_avc_frame_brc_update_curbe_data {
1021 uint32_t target_size;
1025 uint32_t frame_number;
1029 uint32_t size_of_pic_headers;
1033 uint32_t start_gadj_frame0: 16;
1034 uint32_t start_gadj_frame1: 16;
1038 uint32_t start_gadj_frame2: 16;
1039 uint32_t start_gadj_frame3: 16;
1043 uint32_t target_size_flag: 8;
1044 uint32_t brc_flag: 8;
1045 uint32_t max_num_paks: 8;
1046 uint32_t cur_frame_type: 8;
1050 uint32_t num_skip_frames: 8;
1051 uint32_t minimum_qp: 8;
1052 uint32_t maximum_qp: 8;
1053 uint32_t enable_force_skip: 1;
1054 uint32_t enable_sliding_window: 1;
1055 uint32_t reserved: 6;
1059 uint32_t size_skip_frames;
1063 uint32_t start_global_adjust_mult_0: 8;
1064 uint32_t start_global_adjust_mult_1: 8;
1065 uint32_t start_global_adjust_mult_2: 8;
1066 uint32_t start_global_adjust_mult_3: 8;
1070 uint32_t start_global_adjust_mult_4: 8;
1071 uint32_t start_global_adjust_div_0: 8;
1072 uint32_t start_global_adjust_div_1: 8;
1073 uint32_t start_global_adjust_div_2: 8;
1077 uint32_t start_global_adjust_div_3: 8;
1078 uint32_t start_global_adjust_div_4: 8;
1079 uint32_t qp_threshold_0: 8;
1080 uint32_t qp_threshold_1: 8;
1084 uint32_t qp_threshold_2: 8;
1085 uint32_t qp_threshold_3: 8;
1086 uint32_t g_rate_ratio_threshold_0: 8;
1087 uint32_t g_rate_ratio_threshold_1: 8;
1091 uint32_t g_rate_ratio_threshold_2: 8;
1092 uint32_t g_rate_ratio_threshold_3: 8;
1093 uint32_t g_rate_ratio_threshold_4: 8;
1094 uint32_t g_rate_ratio_threshold_5: 8;
1098 uint32_t g_rate_ratio_threshold_qp_0: 8;
1099 uint32_t g_rate_ratio_threshold_qp_1: 8;
1100 uint32_t g_rate_ratio_threshold_qp_2: 8;
1101 uint32_t g_rate_ratio_threshold_qp_3: 8;
1105 uint32_t g_rate_ratio_threshold_qp_4: 8;
1106 uint32_t g_rate_ratio_threshold_qp_5: 8;
1107 uint32_t g_rate_ratio_threshold_qp_6: 8;
1108 uint32_t qp_index_of_cur_pic: 8;
1112 uint32_t reserved0: 8;
1113 uint32_t enable_roi: 8;
1114 uint32_t reserved1: 8;
1115 uint32_t reserved2: 8;
1131 uint32_t user_max_frame;
1150 } gen9_avc_frame_brc_update_curbe_data;
1152 typedef enum _gen9_avc_binding_table_offset_mb_brc_update {
1153 GEN9_AVC_MB_BRC_UPDATE_HISTORY_INDEX = 0,
1154 GEN9_AVC_MB_BRC_UPDATE_MB_QP_INDEX = 1,
1155 GEN9_AVC_MB_BRC_UPDATE_ROI_INDEX = 2,
1156 GEN9_AVC_MB_BRC_UPDATE_MB_STATUS_INDEX = 3,
1157 GEN9_AVC_MB_BRC_UPDATE_NUM_SURFACES_INDEX = 4
1158 } gen9_avc_binding_table_offset_mb_brc_update;
1160 typedef struct _gen9_avc_mb_brc_curbe_data {
1162 uint32_t cur_frame_type: 8;
1163 uint32_t enable_roi: 8;
1164 uint32_t roi_ratio: 8;
1165 uint32_t reserved0: 8;
1193 } gen9_avc_mb_brc_curbe_data;
1195 #define GEN9_AVC_KERNEL_BRC_INIT 0
1196 #define GEN9_AVC_KERNEL_BRC_FRAME_UPDATE 1
1197 #define GEN9_AVC_KERNEL_BRC_RESET 2
1198 #define GEN9_AVC_KERNEL_BRC_I_FRAME_DIST 3
1199 #define GEN9_AVC_KERNEL_BRC_BLOCK_COPY 4
1200 #define GEN9_AVC_KERNEL_BRC_MB_UPDATE 5
1201 #define NUM_GEN9_AVC_KERNEL_BRC 6
1203 struct gen_avc_brc_context {
1204 struct i965_gpe_context gpe_contexts[NUM_GEN9_AVC_KERNEL_BRC];
1208 wp structure and define
1210 typedef enum _gen9_avc_binding_table_offset_wp {
1211 GEN9_AVC_WP_INPUT_REF_SURFACE_INDEX = 0,
1212 GEN9_AVC_WP_OUTPUT_SCALED_SURFACE_INDEX = 1,
1213 GEN9_AVC_WP_NUM_SURFACES_INDEX = 2
1214 } gen9_avc_binding_table_offset_wp;
1216 typedef struct _gen9_avc_wp_curbe_data {
1218 uint32_t default_weight: 16;
1219 uint32_t default_offset: 16;
1223 uint32_t roi_0_x_left: 16;
1224 uint32_t roi_0_y_top: 16;
1228 uint32_t roi_0_x_right: 16;
1229 uint32_t roi_0_y_bottom: 16;
1233 uint32_t roi_0_weight: 16;
1234 uint32_t roi_0_offset: 16;
1238 uint32_t roi_1_x_left: 16;
1239 uint32_t roi_1_y_top: 16;
1243 uint32_t roi_1_x_right: 16;
1244 uint32_t roi_1_y_bottom: 16;
1248 uint32_t roi_1_weight: 16;
1249 uint32_t roi_1_offset: 16;
1253 uint32_t roi_2_x_left: 16;
1254 uint32_t roi_2_y_top: 16;
1258 uint32_t roi_2_x_right: 16;
1259 uint32_t roi_2_y_bottom: 16;
1263 uint32_t roi_2_weight: 16;
1264 uint32_t roi_2_offset: 16;
1268 uint32_t roi_3_x_left: 16;
1269 uint32_t roi_3_y_top: 16;
1273 uint32_t roi_3_x_right: 16;
1274 uint32_t roi_3_y_bottom: 16;
1278 uint32_t roi_3_weight: 16;
1279 uint32_t roi_3_offset: 16;
1283 uint32_t roi_4_x_left: 16;
1284 uint32_t roi_4_y_top: 16;
1288 uint32_t roi_4_x_right: 16;
1289 uint32_t roi_4_y_bottom: 16;
1293 uint32_t roi_4_weight: 16;
1294 uint32_t roi_4_offset: 16;
1298 uint32_t roi_5_x_left: 16;
1299 uint32_t roi_5_y_top: 16;
1303 uint32_t roi_5_x_right: 16;
1304 uint32_t roi_5_y_bottom: 16;
1308 uint32_t roi_5_weight: 16;
1309 uint32_t roi_5_offset: 16;
1313 uint32_t roi_6_x_left: 16;
1314 uint32_t roi_6_y_top: 16;
1318 uint32_t roi_6_x_right: 16;
1319 uint32_t roi_6_y_bottom: 16;
1323 uint32_t roi_6_weight: 16;
1324 uint32_t roi_6_offset: 16;
1328 uint32_t roi_7_x_left: 16;
1329 uint32_t roi_7_y_top: 16;
1333 uint32_t roi_7_x_right: 16;
1334 uint32_t roi_7_y_bottom: 16;
1338 uint32_t roi_7_weight: 16;
1339 uint32_t roi_7_offset: 16;
1343 uint32_t roi_8_x_left: 16;
1344 uint32_t roi_8_y_top: 16;
1348 uint32_t roi_8_x_right: 16;
1349 uint32_t roi_8_y_bottom: 16;
1353 uint32_t roi_8_weight: 16;
1354 uint32_t roi_8_offset: 16;
1358 uint32_t roi_9_x_left: 16;
1359 uint32_t roi_9_y_top: 16;
1363 uint32_t roi_9_x_right: 16;
1364 uint32_t roi_9_y_bottom: 16;
1368 uint32_t roi_9_weight: 16;
1369 uint32_t roi_9_offset: 16;
1373 uint32_t roi_10_x_left: 16;
1374 uint32_t roi_10_y_top: 16;
1378 uint32_t roi_10_x_right: 16;
1379 uint32_t roi_10_y_bottom: 16;
1383 uint32_t roi_10_weight: 16;
1384 uint32_t roi_10_offset: 16;
1388 uint32_t roi_11_x_left: 16;
1389 uint32_t roi_11_y_top: 16;
1393 uint32_t roi_11_x_right: 16;
1394 uint32_t roi_11_y_bottom: 16;
1398 uint32_t roi_11_weight: 16;
1399 uint32_t roi_11_offset: 16;
1403 uint32_t roi_12_x_left: 16;
1404 uint32_t roi_12_y_top: 16;
1408 uint32_t roi_12_x_right: 16;
1409 uint32_t roi_12_y_bottom: 16;
1413 uint32_t roi_12_weight: 16;
1414 uint32_t roi_12_offset: 16;
1418 uint32_t roi_13_x_left: 16;
1419 uint32_t roi_13_y_top: 16;
1423 uint32_t roi_13_x_right: 16;
1424 uint32_t roi_13_y_bottom: 16;
1428 uint32_t roi_13_weight: 16;
1429 uint32_t roi_13_offset: 16;
1433 uint32_t roi_14_x_left: 16;
1434 uint32_t roi_14_y_top: 16;
1438 uint32_t roi_14_x_right: 16;
1439 uint32_t roi_14_y_bottom: 16;
1443 uint32_t roi_14_weight: 16;
1444 uint32_t roi_14_offset: 16;
1448 uint32_t roi_15_x_left: 16;
1449 uint32_t roi_15_y_top: 16;
1453 uint32_t roi_15_x_right: 16;
1454 uint32_t roi_15_y_bottom: 16;
1458 uint32_t roi_15_weight: 16;
1459 uint32_t roi_15_offset: 16;
1463 uint32_t input_surface;
1467 uint32_t output_surface;
1472 } gen9_avc_wp_curbe_data;
1474 struct gen_avc_wp_context {
1475 struct i965_gpe_context gpe_contexts;
1479 mbenc structure and define
1481 typedef enum _gen9_avc_binding_table_offset_mbenc {
1482 GEN9_AVC_MBENC_MFC_AVC_PAK_OBJ_INDEX = 0,
1483 GEN9_AVC_MBENC_IND_MV_DATA_INDEX = 1,
1484 GEN9_AVC_MBENC_BRC_DISTORTION_INDEX = 2, // FOR BRC DISTORTION FOR I
1485 GEN9_AVC_MBENC_CURR_Y_INDEX = 3,
1486 GEN9_AVC_MBENC_CURR_UV_INDEX = 4,
1487 GEN9_AVC_MBENC_MB_SPECIFIC_DATA_INDEX = 5,
1488 GEN9_AVC_MBENC_AUX_VME_OUT_INDEX = 6,
1489 GEN9_AVC_MBENC_REFPICSELECT_L0_INDEX = 7,
1490 GEN9_AVC_MBENC_MV_DATA_FROM_ME_INDEX = 8,
1491 GEN9_AVC_MBENC_4XME_DISTORTION_INDEX = 9,
1492 GEN9_AVC_MBENC_SLICEMAP_DATA_INDEX = 10,
1493 GEN9_AVC_MBENC_FWD_MB_DATA_INDEX = 11,
1494 GEN9_AVC_MBENC_FWD_MV_DATA_INDEX = 12,
1495 GEN9_AVC_MBENC_MBQP_INDEX = 13,
1496 GEN9_AVC_MBENC_MBBRC_CONST_DATA_INDEX = 14,
1497 GEN9_AVC_MBENC_VME_INTER_PRED_CURR_PIC_IDX_0_INDEX = 15,
1498 GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX0_INDEX = 16,
1499 GEN9_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX0_0_INDEX = 17,
1500 GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX1_INDEX = 18,
1501 GEN9_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX1_0_INDEX = 19,
1502 GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX2_INDEX = 20,
1503 GEN9_AVC_MBENC_RESERVED0_INDEX = 21,
1504 GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX3_INDEX = 22,
1505 GEN9_AVC_MBENC_RESERVED1_INDEX = 23,
1506 GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX4_INDEX = 24,
1507 GEN9_AVC_MBENC_RESERVED2_INDEX = 25,
1508 GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX5_INDEX = 26,
1509 GEN9_AVC_MBENC_RESERVED3_INDEX = 27,
1510 GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX6_INDEX = 28,
1511 GEN9_AVC_MBENC_RESERVED4_INDEX = 29,
1512 GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX7_INDEX = 30,
1513 GEN9_AVC_MBENC_RESERVED5_INDEX = 31,
1514 GEN9_AVC_MBENC_VME_INTER_PRED_CURR_PIC_IDX_1_INDEX = 32,
1515 GEN9_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX0_1_INDEX = 33,
1516 GEN9_AVC_MBENC_RESERVED6_INDEX = 34,
1517 GEN9_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX1_1_INDEX = 35,
1518 GEN9_AVC_MBENC_RESERVED7_INDEX = 36,
1519 GEN9_AVC_MBENC_MB_STATS_INDEX = 37,
1520 GEN9_AVC_MBENC_MAD_DATA_INDEX = 38,
1521 GEN9_AVC_MBENC_FORCE_NONSKIP_MB_MAP_INDEX = 39,
1522 GEN9_AVC_MBENC_WIDI_WA_INDEX = 40,
1523 GEN9_AVC_MBENC_BRC_CURBE_DATA_INDEX = 41,
1524 GEN9_AVC_MBENC_SFD_COST_TABLE_INDEX = 42,
1525 GEN9_AVC_MBENC_MV_PREDICTOR_INDEX = 43,
1526 GEN9_AVC_MBENC_NUM_SURFACES_INDEX = 44
1527 } gen9_avc_binding_table_offset_mbenc;
1529 typedef struct _gen9_avc_mbenc_curbe_data {
1531 uint32_t skip_mode_enable: 1;
1532 uint32_t adaptive_enable: 1;
1533 uint32_t bi_mix_dis: 1;
1534 uint32_t reserved0: 2;
1535 uint32_t early_ime_success_enable: 1;
1536 uint32_t reserved1: 1;
1537 uint32_t t8x8_flag_for_inter_enable: 1;
1538 uint32_t reserved2: 16;
1539 uint32_t early_ime_stop: 8;
1543 uint32_t max_num_mvs: 6;
1544 uint32_t reserved0: 10;
1545 uint32_t bi_weight: 6;
1546 uint32_t reserved1: 6;
1547 uint32_t uni_mix_disable: 1;
1548 uint32_t reserved2: 3;
1552 uint32_t max_len_sp: 8;
1553 uint32_t max_num_su: 8;
1554 uint32_t pitch_width: 16;
1558 uint32_t src_size: 2;
1559 uint32_t reserved0: 2;
1560 uint32_t mb_type_remap: 2;
1561 uint32_t src_access: 1;
1562 uint32_t ref_access: 1;
1563 uint32_t search_ctrl: 3;
1564 uint32_t dual_search_path_option: 1;
1565 uint32_t sub_pel_mode: 2;
1566 uint32_t skip_type: 1;
1567 uint32_t disable_field_cache_allocation: 1;
1568 uint32_t inter_chroma_mode: 1;
1569 uint32_t ftq_enable: 1;
1570 uint32_t bme_disable_fbr: 1;
1571 uint32_t block_based_skip_enable: 1;
1572 uint32_t inter_sad: 2;
1573 uint32_t intra_sad: 2;
1574 uint32_t sub_mb_part_mask: 7;
1575 uint32_t reserved1: 1;
1579 uint32_t picture_height_minus1: 16;
1580 uint32_t mv_restriction_in_slice_enable: 1;
1581 uint32_t delta_mv_enable: 1;
1582 uint32_t true_distortion_enable: 1;
1583 uint32_t enable_wavefront_optimization: 1;
1584 uint32_t enable_fbr_bypass: 1;
1585 uint32_t enable_intra_cost_scaling_for_static_frame: 1;
1586 uint32_t reserved0: 1;
1587 uint32_t enable_widi_wa_surf: 1;
1588 uint32_t enable_widi_dirty_rect: 1;
1589 uint32_t enable_cur_fld_idr: 1;
1590 uint32_t contrained_intra_pred_flag: 1;
1591 uint32_t field_parity_flag: 1;
1592 uint32_t hme_enable: 1;
1593 uint32_t picture_type: 2;
1594 uint32_t use_actual_ref_qp_value: 1;
1598 uint32_t slice_mb_height: 16;
1599 uint32_t ref_width: 8;
1600 uint32_t ref_height: 8;
1604 uint32_t batch_buffer_end;
1608 uint32_t intra_part_mask: 5;
1609 uint32_t non_skip_zmv_added: 1;
1610 uint32_t non_skip_mode_added: 1;
1611 uint32_t luma_intra_src_corner_swap: 1;
1612 uint32_t reserved0: 8;
1613 uint32_t mv_cost_scale_factor: 2;
1614 uint32_t bilinear_enable: 1;
1615 uint32_t src_field_polarity: 1;
1616 uint32_t weightedsad_harr: 1;
1617 uint32_t ac_only_haar: 1;
1618 uint32_t ref_id_cost_mode: 1;
1619 uint32_t reserved1: 1;
1620 uint32_t skip_center_mask: 8;
1624 uint32_t mode_0_cost: 8;
1625 uint32_t mode_1_cost: 8;
1626 uint32_t mode_2_cost: 8;
1627 uint32_t mode_3_cost: 8;
1631 uint32_t mode_4_cost: 8;
1632 uint32_t mode_5_cost: 8;
1633 uint32_t mode_6_cost: 8;
1634 uint32_t mode_7_cost: 8;
1638 uint32_t mode_8_cost: 8;
1639 uint32_t mode_9_cost: 8;
1640 uint32_t ref_id_cost: 8;
1641 uint32_t chroma_intra_mode_cost: 8;
1646 uint32_t mv_0_cost: 8;
1647 uint32_t mv_1_cost: 8;
1648 uint32_t mv_2_cost: 8;
1649 uint32_t mv_3_cost: 8;
1655 uint32_t mv_4_cost: 8;
1656 uint32_t mv_5_cost: 8;
1657 uint32_t mv_6_cost: 8;
1658 uint32_t mv_7_cost: 8;
1662 uint32_t qp_prime_y: 8;
1663 uint32_t qp_prime_cb: 8;
1664 uint32_t qp_prime_cr: 8;
1665 uint32_t target_size_in_word: 8;
1669 uint32_t sic_fwd_transcoeff_threshold_0: 16;
1670 uint32_t sic_fwd_transcoeff_threshold_1: 8;
1671 uint32_t sic_fwd_transcoeff_threshold_2: 8;
1675 uint32_t sic_fwd_transcoeff_threshold_3: 8;
1676 uint32_t sic_fwd_transcoeff_threshold_4: 8;
1677 uint32_t sic_fwd_transcoeff_threshold_5: 8;
1678 uint32_t sic_fwd_transcoeff_threshold_6: 8;
1682 struct generic_search_path_delta sp_delta_0;
1683 struct generic_search_path_delta sp_delta_1;
1684 struct generic_search_path_delta sp_delta_2;
1685 struct generic_search_path_delta sp_delta_3;
1689 struct generic_search_path_delta sp_delta_4;
1690 struct generic_search_path_delta sp_delta_5;
1691 struct generic_search_path_delta sp_delta_6;
1692 struct generic_search_path_delta sp_delta_7;
1696 struct generic_search_path_delta sp_delta_8;
1697 struct generic_search_path_delta sp_delta_9;
1698 struct generic_search_path_delta sp_delta_10;
1699 struct generic_search_path_delta sp_delta_11;
1703 struct generic_search_path_delta sp_delta_12;
1704 struct generic_search_path_delta sp_delta_13;
1705 struct generic_search_path_delta sp_delta_14;
1706 struct generic_search_path_delta sp_delta_15;
1710 struct generic_search_path_delta sp_delta_16;
1711 struct generic_search_path_delta sp_delta_17;
1712 struct generic_search_path_delta sp_delta_18;
1713 struct generic_search_path_delta sp_delta_19;
1717 struct generic_search_path_delta sp_delta_20;
1718 struct generic_search_path_delta sp_delta_21;
1719 struct generic_search_path_delta sp_delta_22;
1720 struct generic_search_path_delta sp_delta_23;
1724 struct generic_search_path_delta sp_delta_24;
1725 struct generic_search_path_delta sp_delta_25;
1726 struct generic_search_path_delta sp_delta_26;
1727 struct generic_search_path_delta sp_delta_27;
1731 struct generic_search_path_delta sp_delta_28;
1732 struct generic_search_path_delta sp_delta_29;
1733 struct generic_search_path_delta sp_delta_30;
1734 struct generic_search_path_delta sp_delta_31;
1738 struct generic_search_path_delta sp_delta_32;
1739 struct generic_search_path_delta sp_delta_33;
1740 struct generic_search_path_delta sp_delta_34;
1741 struct generic_search_path_delta sp_delta_35;
1745 struct generic_search_path_delta sp_delta_36;
1746 struct generic_search_path_delta sp_delta_37;
1747 struct generic_search_path_delta sp_delta_38;
1748 struct generic_search_path_delta sp_delta_39;
1752 struct generic_search_path_delta sp_delta_40;
1753 struct generic_search_path_delta sp_delta_41;
1754 struct generic_search_path_delta sp_delta_42;
1755 struct generic_search_path_delta sp_delta_43;
1759 struct generic_search_path_delta sp_delta_44;
1760 struct generic_search_path_delta sp_delta_45;
1761 struct generic_search_path_delta sp_delta_46;
1762 struct generic_search_path_delta sp_delta_47;
1766 struct generic_search_path_delta sp_delta_48;
1767 struct generic_search_path_delta sp_delta_49;
1768 struct generic_search_path_delta sp_delta_50;
1769 struct generic_search_path_delta sp_delta_51;
1773 struct generic_search_path_delta sp_delta_52;
1774 struct generic_search_path_delta sp_delta_53;
1775 struct generic_search_path_delta sp_delta_54;
1776 struct generic_search_path_delta sp_delta_55;
1780 uint32_t intra_4x4_mode_mask: 9;
1781 uint32_t reserved0: 7;
1782 uint32_t intra_8x8_mode_mask: 9;
1783 uint32_t reserved1: 7;
1787 uint32_t intra_16x16_mode_mask: 4;
1788 uint32_t intra_chroma_mode_mask: 4;
1789 uint32_t intra_compute_type: 2;
1790 uint32_t reserved0: 22;
1794 uint32_t skip_val: 16;
1795 uint32_t mult_pred_l0_disable: 8;
1796 uint32_t mult_pred_l1_disable: 8;
1800 uint32_t intra_16x16_nondc_penalty: 8;
1801 uint32_t intra_8x8_nondc_penalty: 8;
1802 uint32_t intra_4x4_nondc_penalty: 8;
1803 uint32_t reserved0: 8;
1807 uint32_t list0_ref_id0_field_parity: 1;
1808 uint32_t list0_ref_id1_field_parity: 1;
1809 uint32_t list0_ref_id2_field_parity: 1;
1810 uint32_t list0_ref_id3_field_parity: 1;
1811 uint32_t list0_ref_id4_field_parity: 1;
1812 uint32_t list0_ref_id5_field_parity: 1;
1813 uint32_t list0_ref_id6_field_parity: 1;
1814 uint32_t list0_ref_id7_field_parity: 1;
1815 uint32_t list1_ref_id0_frm_field_parity: 1;
1816 uint32_t list1_ref_id1_frm_field_parity: 1;
1817 uint32_t widi_intra_refresh_en: 2;
1818 uint32_t arbitray_num_mbs_per_slice: 1;
1819 uint32_t enable_adaptive_tx_decision: 1;
1820 uint32_t force_non_skip_check: 1;
1821 uint32_t disable_enc_skip_check: 1;
1822 uint32_t enable_direct_bias_adjustment: 1;
1823 uint32_t b_force_to_skip: 1;
1824 uint32_t enable_global_motion_bias_adjustment: 1;
1825 uint32_t enable_adaptive_search_window_size: 1;
1826 uint32_t enable_per_mb_static_check: 1;
1827 uint32_t reserved0: 3;
1828 uint32_t list1_ref_id0_field_parity: 1;
1829 uint32_t list1_ref_id1_field_parity: 1;
1830 uint32_t mad_enable_falg: 1;
1831 uint32_t roi_enable_flag: 1;
1832 uint32_t enable_mb_flatness_check_optimization: 1;
1833 uint32_t b_direct_mode: 1;
1834 uint32_t mb_brc_enable: 1;
1835 uint32_t b_original_bff: 1;
1839 uint32_t panic_mode_mb_threshold: 16;
1840 uint32_t small_mb_size_in_word: 8;
1841 uint32_t large_mb_size_in_word: 8;
1845 uint32_t num_ref_idx_l0_minus_one: 8;
1846 uint32_t hme_combined_extra_sus: 8;
1847 uint32_t num_ref_idx_l1_minus_one: 8;
1848 uint32_t reserved0: 4;
1849 uint32_t is_fwd_frame_short_term_ref: 1;
1850 uint32_t check_all_fractional_enable: 1;
1851 uint32_t hme_combine_overlap: 2;
1855 uint32_t skip_mode_enable: 1;
1856 uint32_t adaptive_enable: 1;
1857 uint32_t bi_mix_dis: 1;
1858 uint32_t reserved0: 2;
1859 uint32_t early_ime_success_enable: 1;
1860 uint32_t reserved1: 1;
1861 uint32_t t8x8_flag_for_inter_enable: 1;
1862 uint32_t reserved2: 16;
1863 uint32_t early_ime_stop: 8;
1868 uint32_t max_len_sp: 8;
1869 uint32_t max_num_su: 8;
1870 uint32_t ref_threshold: 16;
1874 uint32_t reserved0: 8;
1875 uint32_t hme_ref_windows_comb_threshold: 8;
1876 uint32_t ref_width: 8;
1877 uint32_t ref_height: 8;
1881 uint32_t dist_scale_factor_ref_id0_list0: 16;
1882 uint32_t dist_scale_factor_ref_id1_list0: 16;
1886 uint32_t dist_scale_factor_ref_id2_list0: 16;
1887 uint32_t dist_scale_factor_ref_id3_list0: 16;
1891 uint32_t dist_scale_factor_ref_id4_list0: 16;
1892 uint32_t dist_scale_factor_ref_id5_list0: 16;
1896 uint32_t dist_scale_factor_ref_id6_list0: 16;
1897 uint32_t dist_scale_factor_ref_id7_list0: 16;
1901 uint32_t actual_qp_value_for_ref_id0_list0: 8;
1902 uint32_t actual_qp_value_for_ref_id1_list0: 8;
1903 uint32_t actual_qp_value_for_ref_id2_list0: 8;
1904 uint32_t actual_qp_value_for_ref_id3_list0: 8;
1908 uint32_t actual_qp_value_for_ref_id4_list0: 8;
1909 uint32_t actual_qp_value_for_ref_id5_list0: 8;
1910 uint32_t actual_qp_value_for_ref_id6_list0: 8;
1911 uint32_t actual_qp_value_for_ref_id7_list0: 8;
1915 uint32_t actual_qp_value_for_ref_id0_list1: 8;
1916 uint32_t actual_qp_value_for_ref_id1_list1: 8;
1917 uint32_t ref_cost: 16;
1921 uint32_t mb_qp_read_factor: 8;
1922 uint32_t intra_cost_sf: 8;
1923 uint32_t max_vmv_r: 16;
1927 uint32_t widi_intra_refresh_mb_num: 16;
1928 uint32_t widi_intra_refresh_unit_in_mb_minus1: 8;
1929 uint32_t widi_intra_refresh_qp_delta: 8;
1933 uint32_t roi_1_x_left: 16;
1934 uint32_t roi_1_y_top: 16;
1938 uint32_t roi_1_x_right: 16;
1939 uint32_t roi_1_y_bottom: 16;
1943 uint32_t roi_2_x_left: 16;
1944 uint32_t roi_2_y_top: 16;
1948 uint32_t roi_2_x_right: 16;
1949 uint32_t roi_2_y_bottom: 16;
1953 uint32_t roi_3_x_left: 16;
1954 uint32_t roi_3_y_top: 16;
1958 uint32_t roi_3_x_right: 16;
1959 uint32_t roi_3_y_bottom: 16;
1963 uint32_t roi_4_x_left: 16;
1964 uint32_t roi_4_y_top: 16;
1968 uint32_t roi_4_x_right: 16;
1969 uint32_t roi_4_y_bottom: 16;
1973 uint32_t roi_1_dqp_prime_y: 8;
1974 uint32_t roi_2_dqp_prime_y: 8;
1975 uint32_t roi_3_dqp_prime_y: 8;
1976 uint32_t roi_4_dqp_prime_y: 8;
1980 uint32_t mb_texture_threshold: 16;
1981 uint32_t tx_decision_threshold: 16;
1985 uint32_t hme_mv_cost_scaling_factor: 8;
1986 uint32_t reserved0: 24;
2006 uint32_t mb_data_surf_index;
2010 uint32_t mv_data_surf_index;
2014 uint32_t i_dist_surf_index;
2018 uint32_t src_y_surf_index;
2022 uint32_t mb_specific_data_surf_index;
2026 uint32_t aux_vme_out_surf_index;
2030 uint32_t curr_ref_pic_sel_surf_index;
2034 uint32_t hme_mv_pred_fwd_bwd_surf_index;
2038 uint32_t hme_dist_surf_index;
2042 uint32_t slice_map_surf_index;
2046 uint32_t fwd_frm_mb_data_surf_index;
2050 uint32_t fwd_frm_mv_surf_index;
2054 uint32_t mb_qp_buffer;
2058 uint32_t mb_brc_lut;
2062 uint32_t vme_inter_prediction_surf_index;
2066 uint32_t vme_inter_prediction_mr_surf_index;
2070 uint32_t mb_stats_surf_index;
2074 uint32_t mad_surf_index;
2078 uint32_t force_non_skip_mb_map_surface;
2082 uint32_t widi_wa_surf_index;
2086 uint32_t brc_curbe_surf_index;
2090 uint32_t static_detection_cost_table_index;
2101 } gen9_avc_mbenc_curbe_data;
2103 #define GEN9_AVC_KERNEL_MBENC_QUALITY_I 0
2104 #define GEN9_AVC_KERNEL_MBENC_QUALITY_P 1
2105 #define GEN9_AVC_KERNEL_MBENC_QUALITY_B 2
2106 #define GEN9_AVC_KERNEL_MBENC_NORMAL_I 3
2107 #define GEN9_AVC_KERNEL_MBENC_NORMAL_P 4
2108 #define GEN9_AVC_KERNEL_MBENC_NORMAL_B 5
2109 #define GEN9_AVC_KERNEL_MBENC_PERFORMANCE_I 6
2110 #define GEN9_AVC_KERNEL_MBENC_PERFORMANCE_P 7
2111 #define GEN9_AVC_KERNEL_MBENC_PERFORMANCE_B 8
2112 #define NUM_GEN9_AVC_KERNEL_MBENC 9
2114 /* structure holding AVC FEI mbenc Curbe data */
2115 typedef struct _gen9_avc_fei_mbenc_curbe_data {
2116 /* dw0: M1.0 defined in the VME message header/payload */
2118 uint32_t skip_mode_enable: 1;
2119 uint32_t adaptive_enable: 1;
2120 uint32_t bi_mix_diable: 1;
2121 uint32_t reserved0: 2;
2122 uint32_t early_ime_success_enable: 1;
2123 uint32_t reserved1: 1;
2124 uint32_t t8x8_flag_for_inter_enable: 1;
2125 uint32_t reserved2: 16;
2126 uint32_t early_ime_stop: 8;
2129 /* dw1: M1.1 defined in the VME message header/payload */
2131 uint32_t max_num_mvs: 6;
2132 uint32_t reserved0: 10;
2133 uint32_t bi_Weight: 6;
2134 uint32_t reserved1: 6;
2135 uint32_t uni_mix_disable: 1;
2136 uint32_t reserved2: 3;
2138 /* dw2: lower 16bits in M1.2 defined in the VME message header/payload */
2140 uint32_t max_len_sp: 8;
2141 uint32_t max_num_su: 8;
2142 uint32_t pic_width: 16;
2145 /* dw3: M0.3 defined in the VME message header/payload */
2147 uint32_t src_size: 2;
2148 uint32_t reserved0: 1;
2149 uint32_t reserved1: 1;
2150 uint32_t mb_type_remap: 2;
2151 uint32_t src_access: 1;
2152 uint32_t ref_access: 1;
2153 uint32_t search_ctrl: 3;
2154 uint32_t dual_search_path_option: 1;
2155 uint32_t sub_pel_mode: 2;
2156 uint32_t skip_type: 1;
2157 uint32_t disable_field_cache_allocation: 1;
2158 uint32_t inter_chroma_mode: 1;
2159 uint32_t ft_enable: 1;
2160 uint32_t bme_disable_fbr: 1;
2161 uint32_t block_based_skip_enable: 1;
2162 uint32_t inter_sad: 2;
2163 uint32_t Intra_sad: 2;
2164 uint32_t sub_mb_part_mask: 7;
2165 uint32_t reserved2: 1;
2170 uint32_t pic_height_minus1: 16;
2171 uint32_t mv_restriction_in_slice_enable: 1;
2172 uint32_t delta_mv_enable: 1;
2173 uint32_t true_distortion_enable: 1;
2174 uint32_t enable_wavefront_optimization: 1;
2175 uint32_t enable_fbr_bypass: 1;
2176 uint32_t enable_intra_cost_scaling_for_static_frame: 1;
2177 uint32_t reserved0: 1;
2178 uint32_t enable_widi_wa_s: 1;
2179 uint32_t enable_widi_dirty_rect: 1;
2180 uint32_t enable_cur_fld_idr: 1;
2181 uint32_t constrained_intra_pred_flag: 1;
2182 uint32_t field_parity_flag: 1;
2183 uint32_t hme_enable: 1;
2184 uint32_t picture_type: 2;
2185 uint32_t use_actual_ref_qp_value: 1;
2188 /* dw5: M0.5 defined in the VME message header/payload */
2190 uint32_t slice_mb_height: 16;
2191 uint32_t ref_width: 8;
2192 uint32_t ref_height: 8;
2197 uint32_t batch_buffer_end: 32;
2200 /* dw7: M1.7 defined in the VME message header/payload */
2202 uint32_t intra_part_mask: 5;
2203 uint32_t non_skip_zmv_added: 1;
2204 uint32_t non_skip_mode_added: 1;
2205 uint32_t luma_intra_src_corner_swap: 1;
2206 uint32_t reserved0: 8;
2207 uint32_t mv_cost_scale_factor: 2;
2208 uint32_t bilinear_enable: 1;
2209 uint32_t src_field_polarity: 1;
2210 uint32_t weightedsad_haar: 1;
2211 uint32_t ac_only_haar: 1;
2212 uint32_t ref_id_cost_mode: 1;
2213 uint32_t reserved1: 1;
2214 uint32_t skip_center_mask: 8;
2219 uint32_t mode_0_cost: 8;
2220 uint32_t mode_1_cost: 8;
2221 uint32_t mode_2_cost: 8;
2222 uint32_t mode_3_cost: 8;
2227 uint32_t mode_4_cost: 8;
2228 uint32_t mode_5_cost: 8;
2229 uint32_t mode_6_cost: 8;
2230 uint32_t mode_7_cost: 8;
2235 uint32_t mode_8_cost: 8;
2236 uint32_t mode_9_cost: 8;
2237 uint32_t ref_id_cost: 8;
2238 uint32_t chroma_intra_mode_cost: 8;
2244 uint32_t mv_0_cost: 8;
2245 uint32_t mv_1_cost: 8;
2246 uint32_t mv_2_cost: 8;
2247 uint32_t mv_3_cost: 8;
2254 uint32_t mv_4_cost: 8;
2255 uint32_t mv_5_cost: 8;
2256 uint32_t mv_6_cost: 8;
2257 uint32_t mv_7_cost: 8;
2262 uint32_t qp_prime_y: 8;
2263 uint32_t qp_prime_cb: 8;
2264 uint32_t qp_prime_cr: 8;
2265 uint32_t target_size_in_word: 8;
2269 uint32_t sic_fwd_transcoeff_threshold_0: 16;
2270 uint32_t sic_fwd_transcoeff_threshold_1: 8;
2271 uint32_t sic_fwd_transcoeff_threshold_2: 8;
2275 uint32_t sic_fwd_transcoeff_threshold_3: 8;
2276 uint32_t sic_fwd_transcoeff_threshold_4: 8;
2277 uint32_t sic_fwd_transcoeff_threshold_5: 8;
2278 uint32_t sic_fwd_transcoeff_threshold_6: 8;
2282 struct generic_search_path_delta sp_delta_0;
2283 struct generic_search_path_delta sp_delta_1;
2284 struct generic_search_path_delta sp_delta_2;
2285 struct generic_search_path_delta sp_delta_3;
2289 struct generic_search_path_delta sp_delta_4;
2290 struct generic_search_path_delta sp_delta_5;
2291 struct generic_search_path_delta sp_delta_6;
2292 struct generic_search_path_delta sp_delta_7;
2296 struct generic_search_path_delta sp_delta_8;
2297 struct generic_search_path_delta sp_delta_9;
2298 struct generic_search_path_delta sp_delta_10;
2299 struct generic_search_path_delta sp_delta_11;
2303 struct generic_search_path_delta sp_delta_12;
2304 struct generic_search_path_delta sp_delta_13;
2305 struct generic_search_path_delta sp_delta_14;
2306 struct generic_search_path_delta sp_delta_15;
2310 struct generic_search_path_delta sp_delta_16;
2311 struct generic_search_path_delta sp_delta_17;
2312 struct generic_search_path_delta sp_delta_18;
2313 struct generic_search_path_delta sp_delta_19;
2317 struct generic_search_path_delta sp_delta_20;
2318 struct generic_search_path_delta sp_delta_21;
2319 struct generic_search_path_delta sp_delta_22;
2320 struct generic_search_path_delta sp_delta_23;
2324 struct generic_search_path_delta sp_delta_24;
2325 struct generic_search_path_delta sp_delta_25;
2326 struct generic_search_path_delta sp_delta_26;
2327 struct generic_search_path_delta sp_delta_27;
2331 struct generic_search_path_delta sp_delta_28;
2332 struct generic_search_path_delta sp_delta_29;
2333 struct generic_search_path_delta sp_delta_30;
2334 struct generic_search_path_delta sp_delta_31;
2338 struct generic_search_path_delta sp_delta_32;
2339 struct generic_search_path_delta sp_delta_33;
2340 struct generic_search_path_delta sp_delta_34;
2341 struct generic_search_path_delta sp_delta_35;
2345 struct generic_search_path_delta sp_delta_36;
2346 struct generic_search_path_delta sp_delta_37;
2347 struct generic_search_path_delta sp_delta_38;
2348 struct generic_search_path_delta sp_delta_39;
2352 struct generic_search_path_delta sp_delta_40;
2353 struct generic_search_path_delta sp_delta_41;
2354 struct generic_search_path_delta sp_delta_42;
2355 struct generic_search_path_delta sp_delta_43;
2359 struct generic_search_path_delta sp_delta_44;
2360 struct generic_search_path_delta sp_delta_45;
2361 struct generic_search_path_delta sp_delta_46;
2362 struct generic_search_path_delta sp_delta_47;
2366 struct generic_search_path_delta sp_delta_48;
2367 struct generic_search_path_delta sp_delta_49;
2368 struct generic_search_path_delta sp_delta_50;
2369 struct generic_search_path_delta sp_delta_51;
2373 struct generic_search_path_delta sp_delta_52;
2374 struct generic_search_path_delta sp_delta_53;
2375 struct generic_search_path_delta sp_delta_54;
2376 struct generic_search_path_delta sp_delta_55;
2380 uint32_t intra_4x4_mode_mask: 9;
2381 uint32_t reserved0: 7;
2382 uint32_t intra_8x8_mode_mask: 9;
2383 uint32_t reserved1: 7;
2387 uint32_t intra_16x16_mode_mask: 4;
2388 uint32_t intra_chroma_mode_mask: 4;
2389 uint32_t intra_compute_type: 2;
2390 uint32_t reserved0: 22;
2394 uint32_t skip_val: 16;
2395 uint32_t mult_pred_l0_disable: 8;
2396 uint32_t mult_pred_l1_disable: 8;
2400 uint32_t intra_16x16_nondc_penalty: 8;
2401 uint32_t intra_8x8_nondc_penalty: 8;
2402 uint32_t intra_4x4_nondc_penalty: 8;
2403 uint32_t reserved0: 8;
2407 uint32_t list0_ref_id0_field_parity: 1;
2408 uint32_t list0_ref_id1_field_parity: 1;
2409 uint32_t list0_ref_id2_field_parity: 1;
2410 uint32_t list0_ref_id3_field_parity: 1;
2411 uint32_t list0_ref_id4_field_parity: 1;
2412 uint32_t list0_ref_id5_field_parity: 1;
2413 uint32_t list0_ref_id6_field_parity: 1;
2414 uint32_t list0_ref_id7_field_parity: 1;
2415 uint32_t list1_ref_id0_frm_field_parity: 1;
2416 uint32_t list1_ref_id1_frm_field_parity: 1;
2417 uint32_t widi_intra_refresh_en: 2;
2418 uint32_t arbitray_num_mbs_per_slice: 1;
2419 uint32_t enable_adaptive_tx_decision: 1;
2420 uint32_t force_non_skip_check: 1;
2421 uint32_t disable_enc_skip_check: 1;
2422 uint32_t enable_direct_bias_adjustment: 1;
2423 uint32_t b_force_to_skip: 1;
2424 uint32_t enable_global_motion_bias_adjustment: 1;
2425 uint32_t enable_adaptive_search_window_size: 1;
2426 uint32_t enable_per_mb_static_check: 1;
2427 uint32_t reserved0: 3;
2428 uint32_t list1_ref_id0_field_parity: 1;
2429 uint32_t list1_ref_id1_field_parity: 1;
2430 uint32_t mad_enable_falg: 1;
2431 uint32_t roi_enable_flag: 1;
2432 uint32_t enable_mb_flatness_check_optimization: 1;
2433 uint32_t b_direct_mode: 1;
2434 uint32_t mb_brc_enable: 1;
2435 uint32_t b_original_bff: 1;
2439 uint32_t panic_mode_mb_threshold: 16;
2440 uint32_t small_mb_size_in_word: 8;
2441 uint32_t large_mb_size_in_word: 8;
2445 uint32_t num_ref_idx_l0_minus_one: 8;
2446 uint32_t hme_combined_extra_sus: 8;
2447 uint32_t num_ref_idx_l1_minus_one: 8;
2448 uint32_t reserved0: 4;
2449 uint32_t is_fwd_frame_short_term_ref: 1;
2450 uint32_t check_all_fractional_enable: 1;
2451 uint32_t hme_combine_overlap: 2;
2455 uint32_t skip_mode_enable: 1;
2456 uint32_t adaptive_enable: 1;
2457 uint32_t bi_mix_dis: 1;
2458 uint32_t reserved0: 2;
2459 uint32_t early_ime_success_enable: 1;
2460 uint32_t reserved1: 1;
2461 uint32_t t8x8_flag_for_inter_enable: 1;
2462 uint32_t reserved2: 16;
2463 uint32_t early_ime_stop: 8;
2468 uint32_t max_len_sp: 8;
2469 uint32_t max_num_su: 8;
2470 uint32_t ref_threshold: 16;
2474 uint32_t reserved0: 8;
2475 uint32_t hme_ref_windows_comb_threshold: 8;
2476 uint32_t ref_width: 8;
2477 uint32_t ref_height: 8;
2481 uint32_t dist_scale_factor_ref_id0_list0: 16;
2482 uint32_t dist_scale_factor_ref_id1_list0: 16;
2486 uint32_t dist_scale_factor_ref_id2_list0: 16;
2487 uint32_t dist_scale_factor_ref_id3_list0: 16;
2491 uint32_t dist_scale_factor_ref_id4_list0: 16;
2492 uint32_t dist_scale_factor_ref_id5_list0: 16;
2496 uint32_t dist_scale_factor_ref_id6_list0: 16;
2497 uint32_t dist_scale_factor_ref_id7_list0: 16;
2501 uint32_t actual_qp_value_for_ref_id0_list0: 8;
2502 uint32_t actual_qp_value_for_ref_id1_list0: 8;
2503 uint32_t actual_qp_value_for_ref_id2_list0: 8;
2504 uint32_t actual_qp_value_for_ref_id3_list0: 8;
2508 uint32_t actual_qp_value_for_ref_id4_list0: 8;
2509 uint32_t actual_qp_value_for_ref_id5_list0: 8;
2510 uint32_t actual_qp_value_for_ref_id6_list0: 8;
2511 uint32_t actual_qp_value_for_ref_id7_list0: 8;
2515 uint32_t actual_qp_value_for_ref_id0_list1: 8;
2516 uint32_t actual_qp_value_for_ref_id1_list1: 8;
2517 uint32_t ref_cost: 16;
2521 uint32_t mb_qp_read_factor: 8;
2522 uint32_t intra_cost_sf: 8;
2523 uint32_t max_vmv_r: 16;
2527 uint32_t widi_intra_refresh_mb_num: 16;
2528 uint32_t widi_intra_refresh_unit_in_mb_minus1: 8;
2529 uint32_t widi_intra_refresh_qp_delta: 8;
2533 uint32_t roi_1_x_left: 16;
2534 uint32_t roi_1_y_top: 16;
2538 uint32_t roi_1_x_right: 16;
2539 uint32_t roi_1_y_bottom: 16;
2543 uint32_t roi_2_x_left: 16;
2544 uint32_t roi_2_y_top: 16;
2548 uint32_t roi_2_x_right: 16;
2549 uint32_t roi_2_y_bottom: 16;
2553 uint32_t roi_3_x_left: 16;
2554 uint32_t roi_3_y_top: 16;
2558 uint32_t roi_3_x_right: 16;
2559 uint32_t roi_3_y_bottom: 16;
2563 uint32_t roi_4_x_left: 16;
2564 uint32_t roi_4_y_top: 16;
2568 uint32_t roi_4_x_right: 16;
2569 uint32_t roi_4_y_bottom: 16;
2573 uint32_t roi_1_dqp_prime_y: 8;
2574 uint32_t roi_2_dqp_prime_y: 8;
2575 uint32_t roi_3_dqp_prime_y: 8;
2576 uint32_t roi_4_dqp_prime_y: 8;
2580 uint32_t mb_texture_threshold: 16;
2581 uint32_t tx_decision_threshold: 16;
2585 uint32_t hme_mv_cost_scaling_factor: 8;
2586 uint32_t reserved0: 24;
2607 uint32_t num_mv_predictors_l0: 4;
2608 uint32_t fei_enable: 1;
2609 uint32_t multiple_mv_predictor_per_mb_enable: 1;
2610 uint32_t vme_distortion_output_enable: 1;
2611 uint32_t per_mb_qp_enable: 1;
2612 uint32_t mb_input_enable: 1;
2613 uint32_t fei_mode: 1;
2614 uint32_t num_mv_predictors_l1: 4;
2615 uint32_t reserved: 18;
2620 uint32_t reserved: 32;
2625 uint32_t reserved: 32;
2630 uint32_t reserved: 32;
2635 uint32_t reserved: 32;
2640 uint32_t reserved: 32;
2645 uint32_t reserved: 32;
2650 uint32_t reserved: 32;
2655 uint32_t reserved: 32;
2660 uint32_t reserved: 32;
2665 uint32_t reserved: 32;
2670 uint32_t reserved: 32;
2675 uint32_t reserved: 32;
2680 uint32_t reserved: 32;
2685 uint32_t reserved: 32;
2690 uint32_t reserved: 32;
2695 uint32_t mb_data_surf_index: 32;
2700 uint32_t mv_data_surf_index: 32;
2705 uint32_t i_dist_surf_index: 32;
2710 uint32_t src_y_surf_index: 32;
2715 uint32_t mb_specific_data_surf_index: 32;
2720 uint32_t aux_vme_out_surf_index: 32;
2725 uint32_t curr_ref_pic_sel_surf_index: 32;
2730 uint32_t hme_mv_pred_fwd_bwd_surf_index: 32;
2735 uint32_t hme_dist_surf_index: 32;
2740 uint32_t slice_map_surf_index: 32;
2745 uint32_t fwd_frm_mb_data_surf_index: 32;
2750 uint32_t fwd_frm_mv_surf_index: 32;
2755 uint32_t mb_qp_buffer: 32;
2760 uint32_t mb_brc_lut: 32;
2765 uint32_t vme_inter_prediction_surf_index: 32;
2770 uint32_t vme_inter_prediction_mr_surf_index: 32;
2775 uint32_t mb_stats_surf_index: 32;
2780 uint32_t mad_surf_index: 32;
2785 uint32_t force_non_skip_mb_map_surface: 32;
2790 uint32_t widi_wa_surf_index: 32;
2795 uint32_t brc_curbe_surf_index: 32;
2800 uint32_t static_detection_cost_table_index: 32;
2805 uint32_t fei_mv_predictor_surf_index: 32;
2810 uint32_t reserved: 32;
2813 } gen9_avc_fei_mbenc_curbe_data;
2815 #define GEN9_AVC_FEI_KERNEL_I 0
2816 #define GEN9_AVC_FEI_KERNEL_P 1
2817 #define GEN9_AVC_FEI_KERNEL_B 2
2818 /* Number of MBENC kernels */
2819 #define NUM_GEN9_AVC_FEI_KERNEL_MBENC 3
2821 struct gen_avc_mbenc_context {
2822 struct i965_gpe_context gpe_contexts[NUM_GEN9_AVC_KERNEL_MBENC];
2826 static frame detection structure and define
2828 typedef enum _gen9_avc_binding_table_offset_sfd {
2829 GEN9_AVC_SFD_VDENC_INPUT_IMAGE_STATE_INDEX = 0,
2830 GEN9_AVC_SFD_MV_DATA_SURFACE_INDEX = 1,
2831 GEN9_AVC_SFD_INTER_DISTORTION_SURFACE_INDEX = 2,
2832 GEN9_AVC_SFD_OUTPUT_DATA_SURFACE_INDEX = 3,
2833 GEN9_AVC_SFD_VDENC_OUTPUT_IMAGE_STATE_INDEX = 4,
2834 GEN9_AVC_SFD_NUM_SURFACES = 5
2835 } gen9_avc_binding_table_offset_sfd;
2837 typedef struct _gen9_avc_sfd_curbe_data {
2839 uint32_t vdenc_mode_disable: 1;
2840 uint32_t brc_mode_enable: 1;
2841 uint32_t slice_type: 2;
2842 uint32_t reserved0: 1;
2843 uint32_t stream_in_type: 4;
2844 uint32_t enable_adaptive_mv_stream_in: 1;
2845 uint32_t reserved1: 1;
2846 uint32_t enable_intra_cost_scaling_for_static_frame: 1;
2847 uint32_t reserved2: 20;
2851 uint32_t qp_value: 8;
2852 uint32_t num_of_refs: 8;
2853 uint32_t hme_stream_in_ref_cost: 8;
2854 uint32_t reserved0: 8;
2858 uint32_t frame_width_in_mbs: 16;
2859 uint32_t frame_height_in_mbs: 16;
2863 uint32_t large_mv_threshold;
2867 uint32_t total_large_mv_threshold;
2871 uint32_t zmv_threshold;
2875 uint32_t total_zmv_threshold;
2879 uint32_t min_dist_threshold;
2882 char cost_table[52];
2884 uint32_t actual_width_in_mb: 16;
2885 uint32_t actual_height_in_mb: 16;
2897 uint32_t vdenc_input_image_state_index;
2905 uint32_t mv_data_surface_index;
2909 uint32_t inter_distortion_surface_index;
2913 uint32_t output_data_surface_index;
2917 uint32_t vdenc_output_image_state_index;
2920 } gen9_avc_sfd_curbe_data;
2922 struct gen_avc_sfd_context {
2923 struct i965_gpe_context gpe_contexts;
2928 typedef struct _gen95_avc_scaling4x_curbe_data {
2930 uint32_t input_picture_width : 16;
2931 uint32_t input_picture_height : 16;
2935 uint32_t input_y_bti_frame;
2939 uint32_t output_y_bti_frame;
2951 uint32_t flatness_threshold;
2955 uint32_t enable_mb_flatness_check: 1;
2956 uint32_t enable_mb_variance_output: 1;
2957 uint32_t enable_mb_pixel_average_output: 1;
2958 uint32_t enable_block8x8_statistics_output: 1;
2959 uint32_t reserved0: 28;
2967 uint32_t mbv_proc_stat_bti_frame;
2997 } gen95_avc_scaling4x_curbe_data;
2999 typedef enum _gen95_avc_binding_table_offset_frame_brc_update {
3000 GEN95_AVC_FRAME_BRC_UPDATE_HISTORY_INDEX = 0,
3001 GEN95_AVC_FRAME_BRC_UPDATE_PAK_STATISTICS_OUTPUT_INDEX = 1,
3002 GEN95_AVC_FRAME_BRC_UPDATE_IMAGE_STATE_READ_INDEX = 2,
3003 GEN95_AVC_FRAME_BRC_UPDATE_IMAGE_STATE_WRITE_INDEX = 3,
3004 GEN95_AVC_FRAME_BRC_UPDATE_MBENC_CURBE_WRITE_INDEX = 4,
3005 GEN95_AVC_FRAME_BRC_UPDATE_DISTORTION_INDEX = 5,
3006 GEN95_AVC_FRAME_BRC_UPDATE_CONSTANT_DATA_INDEX = 6,
3007 GEN95_AVC_FRAME_BRC_UPDATE_MB_STATUS_INDEX = 7,
3008 GEN95_AVC_FRAME_BRC_UPDATE_NUM_SURFACES_INDEX = 8
3009 } gen95_avc_binding_table_offset_frame_brc_update;
3011 typedef enum _gen95_avc_binding_table_offset_mbenc {
3012 GEN95_AVC_MBENC_BRC_CURBE_DATA_INDEX = 39,
3013 GEN95_AVC_MBENC_FORCE_NONSKIP_MB_MAP_INDEX = 40,
3014 GEN95_AVC_MBENC_WIDI_WA_INDEX = 41,
3015 GEN95_AVC_MBENC_SFD_COST_TABLE_INDEX = 42,
3016 GEN95_AVC_MBENC_NUM_SURFACES_INDEX = 43
3017 } gen95_avc_binding_table_offset_mbenc;
3019 typedef struct _gen95_avc_mbenc_curbe_data {
3021 uint32_t skip_mode_enable: 1;
3022 uint32_t adaptive_enable: 1;
3023 uint32_t bi_mix_dis: 1;
3024 uint32_t reserved0: 2;
3025 uint32_t early_ime_success_enable: 1;
3026 uint32_t reserved1: 1;
3027 uint32_t t8x8_flag_for_inter_enable: 1;
3028 uint32_t reserved2: 16;
3029 uint32_t early_ime_stop: 8;
3033 uint32_t max_num_mvs: 6;
3034 uint32_t extended_mv_cost_range: 1;
3035 uint32_t reserved0: 9;
3036 uint32_t bi_weight: 6;
3037 uint32_t reserved1: 6;
3038 uint32_t uni_mix_disable: 1;
3039 uint32_t reserved2: 3;
3043 uint32_t max_len_sp: 8;
3044 uint32_t max_num_su: 8;
3045 uint32_t pitch_width: 16;
3049 uint32_t src_size: 2;
3050 uint32_t reserved0: 2;
3051 uint32_t mb_type_remap: 2;
3052 uint32_t src_access: 1;
3053 uint32_t ref_access: 1;
3054 uint32_t search_ctrl: 3;
3055 uint32_t dual_search_path_option: 1;
3056 uint32_t sub_pel_mode: 2;
3057 uint32_t skip_type: 1;
3058 uint32_t disable_field_cache_allocation: 1;
3059 uint32_t inter_chroma_mode: 1;
3060 uint32_t ftq_enable: 1;
3061 uint32_t bme_disable_fbr: 1;
3062 uint32_t block_based_skip_enable: 1;
3063 uint32_t inter_sad: 2;
3064 uint32_t intra_sad: 2;
3065 uint32_t sub_mb_part_mask: 7;
3066 uint32_t reserved1: 1;
3070 uint32_t picture_height_minus1: 16;
3071 uint32_t mv_restriction_in_slice_enable: 1;
3072 uint32_t delta_mv_enable: 1;
3073 uint32_t true_distortion_enable: 1;
3074 uint32_t enable_wavefront_optimization: 1;
3075 uint32_t enable_fbr_bypass: 1;
3076 uint32_t enable_intra_cost_scaling_for_static_frame: 1;
3077 uint32_t enable_intra_refresh: 1;
3078 uint32_t enable_widi_wa_surf: 1;
3079 uint32_t enable_widi_dirty_rect: 1;
3080 uint32_t enable_cur_fld_idr: 1;
3081 uint32_t contrained_intra_pred_flag: 1;
3082 uint32_t field_parity_flag: 1;
3083 uint32_t hme_enable: 1;
3084 uint32_t picture_type: 2;
3085 uint32_t use_actual_ref_qp_value: 1;
3089 uint32_t slice_mb_height: 16;
3090 uint32_t ref_width: 8;
3091 uint32_t ref_height: 8;
3095 uint32_t batch_buffer_end;
3099 uint32_t intra_part_mask: 5;
3100 uint32_t non_skip_zmv_added: 1;
3101 uint32_t non_skip_mode_added: 1;
3102 uint32_t luma_intra_src_corner_swap: 1;
3103 uint32_t reserved0: 8;
3104 uint32_t mv_cost_scale_factor: 2;
3105 uint32_t bilinear_enable: 1;
3106 uint32_t src_field_polarity: 1;
3107 uint32_t weightedsad_harr: 1;
3108 uint32_t ac_only_haar: 1;
3109 uint32_t ref_id_cost_mode: 1;
3110 uint32_t reserved1: 1;
3111 uint32_t skip_center_mask: 8;
3115 uint32_t mode_0_cost: 8;
3116 uint32_t mode_1_cost: 8;
3117 uint32_t mode_2_cost: 8;
3118 uint32_t mode_3_cost: 8;
3122 uint32_t mode_4_cost: 8;
3123 uint32_t mode_5_cost: 8;
3124 uint32_t mode_6_cost: 8;
3125 uint32_t mode_7_cost: 8;
3129 uint32_t mode_8_cost: 8;
3130 uint32_t mode_9_cost: 8;
3131 uint32_t ref_id_cost: 8;
3132 uint32_t chroma_intra_mode_cost: 8;
3137 uint32_t mv_0_cost: 8;
3138 uint32_t mv_1_cost: 8;
3139 uint32_t mv_2_cost: 8;
3140 uint32_t mv_3_cost: 8;
3146 uint32_t mv_4_cost: 8;
3147 uint32_t mv_5_cost: 8;
3148 uint32_t mv_6_cost: 8;
3149 uint32_t mv_7_cost: 8;
3153 uint32_t qp_prime_y: 8;
3154 uint32_t qp_prime_cb: 8;
3155 uint32_t qp_prime_cr: 8;
3156 uint32_t target_size_in_word: 8;
3160 uint32_t sic_fwd_transcoeff_threshold_0: 16;
3161 uint32_t sic_fwd_transcoeff_threshold_1: 8;
3162 uint32_t sic_fwd_transcoeff_threshold_2: 8;
3166 uint32_t sic_fwd_transcoeff_threshold_3: 8;
3167 uint32_t sic_fwd_transcoeff_threshold_4: 8;
3168 uint32_t sic_fwd_transcoeff_threshold_5: 8;
3169 uint32_t sic_fwd_transcoeff_threshold_6: 8;
3173 struct generic_search_path_delta sp_delta_0;
3174 struct generic_search_path_delta sp_delta_1;
3175 struct generic_search_path_delta sp_delta_2;
3176 struct generic_search_path_delta sp_delta_3;
3180 struct generic_search_path_delta sp_delta_4;
3181 struct generic_search_path_delta sp_delta_5;
3182 struct generic_search_path_delta sp_delta_6;
3183 struct generic_search_path_delta sp_delta_7;
3187 struct generic_search_path_delta sp_delta_8;
3188 struct generic_search_path_delta sp_delta_9;
3189 struct generic_search_path_delta sp_delta_10;
3190 struct generic_search_path_delta sp_delta_11;
3194 struct generic_search_path_delta sp_delta_12;
3195 struct generic_search_path_delta sp_delta_13;
3196 struct generic_search_path_delta sp_delta_14;
3197 struct generic_search_path_delta sp_delta_15;
3201 struct generic_search_path_delta sp_delta_16;
3202 struct generic_search_path_delta sp_delta_17;
3203 struct generic_search_path_delta sp_delta_18;
3204 struct generic_search_path_delta sp_delta_19;
3208 struct generic_search_path_delta sp_delta_20;
3209 struct generic_search_path_delta sp_delta_21;
3210 struct generic_search_path_delta sp_delta_22;
3211 struct generic_search_path_delta sp_delta_23;
3215 struct generic_search_path_delta sp_delta_24;
3216 struct generic_search_path_delta sp_delta_25;
3217 struct generic_search_path_delta sp_delta_26;
3218 struct generic_search_path_delta sp_delta_27;
3222 struct generic_search_path_delta sp_delta_28;
3223 struct generic_search_path_delta sp_delta_29;
3224 struct generic_search_path_delta sp_delta_30;
3225 struct generic_search_path_delta sp_delta_31;
3229 struct generic_search_path_delta sp_delta_32;
3230 struct generic_search_path_delta sp_delta_33;
3231 struct generic_search_path_delta sp_delta_34;
3232 struct generic_search_path_delta sp_delta_35;
3236 struct generic_search_path_delta sp_delta_36;
3237 struct generic_search_path_delta sp_delta_37;
3238 struct generic_search_path_delta sp_delta_38;
3239 struct generic_search_path_delta sp_delta_39;
3243 struct generic_search_path_delta sp_delta_40;
3244 struct generic_search_path_delta sp_delta_41;
3245 struct generic_search_path_delta sp_delta_42;
3246 struct generic_search_path_delta sp_delta_43;
3250 struct generic_search_path_delta sp_delta_44;
3251 struct generic_search_path_delta sp_delta_45;
3252 struct generic_search_path_delta sp_delta_46;
3253 struct generic_search_path_delta sp_delta_47;
3257 struct generic_search_path_delta sp_delta_48;
3258 struct generic_search_path_delta sp_delta_49;
3259 struct generic_search_path_delta sp_delta_50;
3260 struct generic_search_path_delta sp_delta_51;
3264 struct generic_search_path_delta sp_delta_52;
3265 struct generic_search_path_delta sp_delta_53;
3266 struct generic_search_path_delta sp_delta_54;
3267 struct generic_search_path_delta sp_delta_55;
3271 uint32_t intra_4x4_mode_mask: 9;
3272 uint32_t reserved0: 7;
3273 uint32_t intra_8x8_mode_mask: 9;
3274 uint32_t reserved1: 7;
3278 uint32_t intra_16x16_mode_mask: 4;
3279 uint32_t intra_chroma_mode_mask: 4;
3280 uint32_t intra_compute_type: 2;
3281 uint32_t reserved0: 22;
3285 uint32_t skip_val: 16;
3286 uint32_t mult_pred_l0_disable: 8;
3287 uint32_t mult_pred_l1_disable: 8;
3291 uint32_t intra_16x16_nondc_penalty: 8;
3292 uint32_t intra_8x8_nondc_penalty: 8;
3293 uint32_t intra_4x4_nondc_penalty: 8;
3294 uint32_t reserved0: 8;
3298 uint32_t list0_ref_id0_field_parity: 1;
3299 uint32_t list0_ref_id1_field_parity: 1;
3300 uint32_t list0_ref_id2_field_parity: 1;
3301 uint32_t list0_ref_id3_field_parity: 1;
3302 uint32_t list0_ref_id4_field_parity: 1;
3303 uint32_t list0_ref_id5_field_parity: 1;
3304 uint32_t list0_ref_id6_field_parity: 1;
3305 uint32_t list0_ref_id7_field_parity: 1;
3306 uint32_t list1_ref_id0_frm_field_parity: 1;
3307 uint32_t list1_ref_id1_frm_field_parity: 1;
3308 uint32_t widi_intra_refresh_en: 2;
3309 uint32_t arbitray_num_mbs_per_slice: 1;
3310 uint32_t tq_enable: 1;
3311 uint32_t force_non_skip_check: 1;
3312 uint32_t disable_enc_skip_check: 1;
3313 uint32_t enable_direct_bias_adjustment: 1;
3314 uint32_t b_force_to_skip: 1;
3315 uint32_t enable_global_motion_bias_adjustment: 1;
3316 uint32_t enable_adaptive_tx_decision: 1;
3317 uint32_t enable_per_mb_static_check: 1;
3318 uint32_t enable_adaptive_search_window_size: 1;
3319 uint32_t reserved0: 1;
3320 uint32_t cqp_flag: 1;
3321 uint32_t list1_ref_id0_field_parity: 1;
3322 uint32_t list1_ref_id1_field_parity: 1;
3323 uint32_t mad_enable_falg: 1;
3324 uint32_t roi_enable_flag: 1;
3325 uint32_t enable_mb_flatness_check_optimization: 1;
3326 uint32_t b_direct_mode: 1;
3327 uint32_t mb_brc_enable: 1;
3328 uint32_t b_original_bff: 1;
3332 uint32_t panic_mode_mb_threshold: 16;
3333 uint32_t small_mb_size_in_word: 8;
3334 uint32_t large_mb_size_in_word: 8;
3338 uint32_t num_ref_idx_l0_minus_one: 8;
3339 uint32_t hme_combined_extra_sus: 8;
3340 uint32_t num_ref_idx_l1_minus_one: 8;
3341 uint32_t reserved0: 4;
3342 uint32_t is_fwd_frame_short_term_ref: 1;
3343 uint32_t check_all_fractional_enable: 1;
3344 uint32_t hme_combine_overlap: 2;
3348 uint32_t skip_mode_enable: 1;
3349 uint32_t adaptive_enable: 1;
3350 uint32_t bi_mix_dis: 1;
3351 uint32_t reserved0: 2;
3352 uint32_t early_ime_success_enable: 1;
3353 uint32_t reserved1: 1;
3354 uint32_t t8x8_flag_for_inter_enable: 1;
3355 uint32_t reserved2: 16;
3356 uint32_t early_ime_stop: 8;
3361 uint32_t max_len_sp: 8;
3362 uint32_t max_num_su: 8;
3363 uint32_t ref_threshold: 16;
3367 uint32_t reserved0: 8;
3368 uint32_t hme_ref_windows_comb_threshold: 8;
3369 uint32_t ref_width: 8;
3370 uint32_t ref_height: 8;
3374 uint32_t dist_scale_factor_ref_id0_list0: 16;
3375 uint32_t dist_scale_factor_ref_id1_list0: 16;
3379 uint32_t dist_scale_factor_ref_id2_list0: 16;
3380 uint32_t dist_scale_factor_ref_id3_list0: 16;
3384 uint32_t dist_scale_factor_ref_id4_list0: 16;
3385 uint32_t dist_scale_factor_ref_id5_list0: 16;
3389 uint32_t dist_scale_factor_ref_id6_list0: 16;
3390 uint32_t dist_scale_factor_ref_id7_list0: 16;
3394 uint32_t actual_qp_value_for_ref_id0_list0: 8;
3395 uint32_t actual_qp_value_for_ref_id1_list0: 8;
3396 uint32_t actual_qp_value_for_ref_id2_list0: 8;
3397 uint32_t actual_qp_value_for_ref_id3_list0: 8;
3401 uint32_t actual_qp_value_for_ref_id4_list0: 8;
3402 uint32_t actual_qp_value_for_ref_id5_list0: 8;
3403 uint32_t actual_qp_value_for_ref_id6_list0: 8;
3404 uint32_t actual_qp_value_for_ref_id7_list0: 8;
3408 uint32_t actual_qp_value_for_ref_id0_list1: 8;
3409 uint32_t actual_qp_value_for_ref_id1_list1: 8;
3410 uint32_t ref_cost: 16;
3414 uint32_t mb_qp_read_factor: 8;
3415 uint32_t intra_cost_sf: 8;
3416 uint32_t max_vmv_r: 16;
3420 uint32_t widi_intra_refresh_mb_x: 16;
3421 uint32_t widi_intra_refresh_unit_in_mb_minus1: 8;
3422 uint32_t widi_intra_refresh_qp_delta: 8;
3426 uint32_t roi_1_x_left: 16;
3427 uint32_t roi_1_y_top: 16;
3431 uint32_t roi_1_x_right: 16;
3432 uint32_t roi_1_y_bottom: 16;
3436 uint32_t roi_2_x_left: 16;
3437 uint32_t roi_2_y_top: 16;
3441 uint32_t roi_2_x_right: 16;
3442 uint32_t roi_2_y_bottom: 16;
3446 uint32_t roi_3_x_left: 16;
3447 uint32_t roi_3_y_top: 16;
3451 uint32_t roi_3_x_right: 16;
3452 uint32_t roi_3_y_bottom: 16;
3456 uint32_t roi_4_x_left: 16;
3457 uint32_t roi_4_y_top: 16;
3461 uint32_t roi_4_x_right: 16;
3462 uint32_t roi_4_y_bottom: 16;
3466 uint32_t roi_1_dqp_prime_y: 8;
3467 uint32_t roi_2_dqp_prime_y: 8;
3468 uint32_t roi_3_dqp_prime_y: 8;
3469 uint32_t roi_4_dqp_prime_y: 8;
3474 uint32_t lambda_8x8_inter: 16;
3475 uint32_t lambda_8x8_intra: 16;
3482 uint32_t lambda_inter: 16;
3483 uint32_t lambda_intra: 16;
3489 uint32_t mb_texture_threshold: 16;
3490 uint32_t tx_decision_threshold: 16;
3494 uint32_t hme_mv_cost_scaling_factor: 8;
3495 uint32_t reserved0: 8;
3496 uint32_t widi_intra_refresh_mb_y: 16;
3516 uint32_t mb_data_surf_index;
3520 uint32_t mv_data_surf_index;
3524 uint32_t i_dist_surf_index;
3528 uint32_t src_y_surf_index;
3532 uint32_t mb_specific_data_surf_index;
3536 uint32_t aux_vme_out_surf_index;
3540 uint32_t curr_ref_pic_sel_surf_index;
3544 uint32_t hme_mv_pred_fwd_bwd_surf_index;
3548 uint32_t hme_dist_surf_index;
3552 uint32_t slice_map_surf_index;
3556 uint32_t fwd_frm_mb_data_surf_index;
3560 uint32_t fwd_frm_mv_surf_index;
3564 uint32_t mb_qp_buffer;
3568 uint32_t mb_brc_lut;
3572 uint32_t vme_inter_prediction_surf_index;
3576 uint32_t vme_inter_prediction_mr_surf_index;
3580 uint32_t mb_stats_surf_index;
3584 uint32_t mad_surf_index;
3588 uint32_t brc_curbe_surf_index;
3592 uint32_t force_non_skip_mb_map_surface;
3596 uint32_t widi_wa_surf_index;
3600 uint32_t static_detection_cost_table_index;
3603 } gen95_avc_mbenc_curbe_data;
3605 typedef struct _gen8_avc_encoder_kernel_header {
3608 // Quality mode for Frame/Field
3609 kernel_header mbenc_quality_I;
3610 kernel_header mbenc_quality_P;
3611 kernel_header mbenc_quality_B;
3612 // Normal mode for Frame/Field
3613 kernel_header mbenc_normal_I;
3614 kernel_header mbenc_normal_P;
3615 kernel_header mbenc_normal_B;
3616 // Performance modes for Frame/Field
3617 kernel_header mbenc_performance_I;
3618 kernel_header mbenc_performance_P;
3619 kernel_header mbenc_performance_B;
3620 // WiDi modes for Frame/Field
3621 kernel_header mbenc_widi_I;
3622 kernel_header mbenc_widi_P;
3623 kernel_header mbenc_widi_B;
3630 kernel_header ply_dscale_ply;
3631 kernel_header ply_dscale_2f_ply_2f;
3633 kernel_header frame_brc_init;
3636 kernel_header frame_brc_update;
3639 kernel_header frame_brc_reset;
3641 // BRC I Frame Distortion
3642 kernel_header frame_brc_i_dist;
3645 kernel_header brc_block_copy;
3648 kernel_header ply_2xdscale_ply;
3649 kernel_header ply_2xdscale_2f_ply_2f;
3651 // Static frame detection Kernel
3652 kernel_header static_detection;
3653 } gen8_avc_encoder_kernel_header;
3655 struct gen8_mfx_avc_img_state {
3658 uint32_t dword_length: 16;
3659 uint32_t command_sub_opcode_b: 5;
3660 uint32_t command_sub_opcode_a: 3;
3661 uint32_t command_opcode: 3;
3662 uint32_t command_pipeline: 2;
3663 uint32_t command_type: 3;
3670 uint32_t frame_size_in_mbs: 16; //minus1
3675 uint32_t frame_width_in_mbs_minus1: 8; //minus1
3677 uint32_t frame_height_in_mbs_minus1: 8; //minus1
3683 uint32_t image_structure: 2;
3684 uint32_t weighted_bipred_idc: 2;
3685 uint32_t weighted_pred_flag: 1;
3686 uint32_t inter_mb_conf_flag: 1;
3687 uint32_t intra_mb_conf_flag: 1;
3689 uint32_t chroma_qp_offset: 5;
3691 uint32_t second_chroma_qp_offset: 5;
3696 uint32_t field_picture_flag: 1;
3697 uint32_t mbaff_mode_active: 1;
3698 uint32_t frame_mb_only_flag: 1;
3699 uint32_t transform_8x8_idct_mode_flag: 1;
3700 uint32_t direct_8x8_interface_flag: 1;
3701 uint32_t constrained_intra_prediction_flag: 1;
3702 uint32_t current_img_dispoable_flag: 1;
3703 uint32_t entropy_coding_flag: 1;
3704 uint32_t mb_mv_format_flag: 1;
3706 uint32_t chroma_format_idc: 2;
3707 uint32_t mv_unpacked_flag: 1;
3708 uint32_t insert_test_flag: 1;
3709 uint32_t load_slice_pointer_flag: 1;
3710 uint32_t macroblock_stat_enable: 1;
3711 uint32_t minimum_frame_size: 16;
3715 uint32_t intra_mb_max_bit_flag: 1;
3716 uint32_t inter_mb_max_bit_flag: 1;
3717 uint32_t frame_size_over_flag: 1;
3718 uint32_t frame_size_under_flag: 1;
3720 uint32_t intra_mb_ipcm_flag: 1;
3722 uint32_t mb_rate_ctrl_flag: 1;
3723 uint32_t min_frame_size_units: 2;
3724 uint32_t inter_mb_zero_cbp_flag: 1; //?change
3726 uint32_t non_first_pass_flag: 1;
3728 uint32_t aq_chroma_disable: 1;
3729 uint32_t aq_rounding: 3;
3730 uint32_t aq_enable: 1;
3734 uint32_t intra_mb_max_size: 12;
3736 uint32_t inter_mb_max_size: 12;
3745 uint32_t slice_delta_qp_max0: 8;
3746 uint32_t slice_delta_qp_max1: 8;
3747 uint32_t slice_delta_qp_max2: 8;
3748 uint32_t slice_delta_qp_max3: 8;
3752 uint32_t slice_delta_qp_min0: 8;
3753 uint32_t slice_delta_qp_min1: 8;
3754 uint32_t slice_delta_qp_min2: 8;
3755 uint32_t slice_delta_qp_min3: 8;
3759 uint32_t frame_bitrate_min: 14;
3760 uint32_t frame_bitrate_min_unit_mode: 1;
3761 uint32_t frame_bitrate_min_unit: 1;
3762 uint32_t frame_bitrate_max: 14;
3763 uint32_t frame_bitrate_max_unit_mode: 1;
3764 uint32_t frame_bitrate_max_unit: 1;
3768 uint32_t frame_bitrate_min_delta: 15;
3770 uint32_t frame_bitrate_max_delta: 15;
3779 uint32_t pic_qp_init_minus26: 8;
3780 uint32_t pic_num_ref_idx_l0_active_minus1: 6;
3782 uint32_t pic_num_ref_idx_l1_active_minus1: 6;
3784 uint32_t num_ref_frames: 5;
3785 uint32_t is_curr_pic_has_mmco5: 1;
3790 uint32_t pic_order_present_flag: 1;
3791 uint32_t delta_pic_order_always_zero_flag: 1;
3792 uint32_t pic_order_cnt_type: 2;
3794 uint32_t slice_group_map_type: 3;
3795 uint32_t redundant_pic_cnt_present_flag: 1;
3796 uint32_t num_slice_groups_minus1: 3;
3797 uint32_t deblock_filter_ctrl_present_flag: 1;
3798 uint32_t log2_max_frame_num_minus4: 8;
3799 uint32_t log2_max_pic_order_cnt_lsb_minus4: 8;
3803 uint32_t slice_group_change_rate: 16;
3804 uint32_t curr_pic_frame_num: 16;
3808 uint32_t current_frame_view_id: 10;
3810 uint32_t max_view_idx_l0: 4;
3812 uint32_t max_view_idx_l1: 4;
3814 uint32_t inter_view_order_disable: 1;
3820 typedef struct _gen8_avc_mbenc_curbe_data {
3822 uint32_t skip_mode_enable: 1;
3823 uint32_t adaptive_enable: 1;
3824 uint32_t bi_mix_dis: 1;
3825 uint32_t reserved0: 2;
3826 uint32_t early_ime_success_enable: 1;
3827 uint32_t reserved1: 1;
3828 uint32_t t8x8_flag_for_inter_enable: 1;
3829 uint32_t reserved2: 16;
3830 uint32_t early_ime_stop: 8;
3834 uint32_t max_num_mvs: 6;
3835 uint32_t reserved0: 10;
3836 uint32_t bi_weight: 6;
3837 uint32_t reserved1: 6;
3838 uint32_t uni_mix_disable: 1;
3839 uint32_t reserved2: 3;
3843 uint32_t max_len_sp: 8;
3844 uint32_t max_num_su: 8;
3845 uint32_t pitch_width: 16;
3849 uint32_t src_size: 2;
3850 uint32_t reserved0: 2;
3851 uint32_t mb_type_remap: 2;
3852 uint32_t src_access: 1;
3853 uint32_t ref_access: 1;
3854 uint32_t search_ctrl: 3;
3855 uint32_t dual_search_path_option: 1;
3856 uint32_t sub_pel_mode: 2;
3857 uint32_t skip_type: 1;
3858 uint32_t disable_field_cache_allocation: 1;
3859 uint32_t inter_chroma_mode: 1;
3860 uint32_t ftq_enable: 1;
3861 uint32_t bme_disable_fbr: 1;
3862 uint32_t block_based_skip_enable: 1;
3863 uint32_t inter_sad: 2;
3864 uint32_t intra_sad: 2;
3865 uint32_t sub_mb_part_mask: 7;
3866 uint32_t reserved1: 1;
3870 uint32_t picture_height_minus1: 16;
3871 uint32_t mv_restriction_in_slice_enable: 1;
3872 uint32_t delta_mv_enable: 1;
3873 uint32_t true_distortion_enable: 1;
3874 uint32_t enable_wavefront_optimization: 1;
3875 uint32_t reserved0: 1;
3876 uint32_t enable_intra_cost_scaling_for_static_frame: 1;
3877 uint32_t enable_intra_refresh: 1;
3878 uint32_t enable_widi_wa_surf: 1;
3879 uint32_t enable_widi_dirty_rect: 1;
3880 uint32_t enable_cur_fld_idr: 1;
3881 uint32_t contrained_intra_pred_flag: 1;
3882 uint32_t field_parity_flag: 1;
3883 uint32_t hme_enable: 1;
3884 uint32_t picture_type: 2;
3885 uint32_t use_actual_ref_qp_value: 1;
3889 uint32_t slice_mb_height: 16;
3890 uint32_t ref_width: 8;
3891 uint32_t ref_height: 8;
3895 uint32_t batch_buffer_end;
3899 uint32_t intra_part_mask: 5;
3900 uint32_t non_skip_zmv_added: 1;
3901 uint32_t non_skip_mode_added: 1;
3902 uint32_t luma_intra_src_corner_swap: 1;
3903 uint32_t reserved0: 8;
3904 uint32_t mv_cost_scale_factor: 2;
3905 uint32_t bilinear_enable: 1;
3906 uint32_t src_field_polarity: 1;
3907 uint32_t weightedsad_harr: 1;
3908 uint32_t ac_only_haar: 1;
3909 uint32_t ref_id_cost_mode: 1;
3910 uint32_t reserved1: 1;
3911 uint32_t skip_center_mask: 8;
3915 uint32_t mode_0_cost: 8;
3916 uint32_t mode_1_cost: 8;
3917 uint32_t mode_2_cost: 8;
3918 uint32_t mode_3_cost: 8;
3922 uint32_t mode_4_cost: 8;
3923 uint32_t mode_5_cost: 8;
3924 uint32_t mode_6_cost: 8;
3925 uint32_t mode_7_cost: 8;
3929 uint32_t mode_8_cost: 8;
3930 uint32_t mode_9_cost: 8;
3931 uint32_t ref_id_cost: 8;
3932 uint32_t chroma_intra_mode_cost: 8;
3937 uint32_t mv_0_cost: 8;
3938 uint32_t mv_1_cost: 8;
3939 uint32_t mv_2_cost: 8;
3940 uint32_t mv_3_cost: 8;
3946 uint32_t mv_4_cost: 8;
3947 uint32_t mv_5_cost: 8;
3948 uint32_t mv_6_cost: 8;
3949 uint32_t mv_7_cost: 8;
3953 uint32_t qp_prime_y: 8;
3954 uint32_t qp_prime_cb: 8;
3955 uint32_t qp_prime_cr: 8;
3956 uint32_t target_size_in_word: 8;
3960 uint32_t sic_fwd_transcoeff_threshold_0: 16;
3961 uint32_t sic_fwd_transcoeff_threshold_1: 8;
3962 uint32_t sic_fwd_transcoeff_threshold_2: 8;
3966 uint32_t sic_fwd_transcoeff_threshold_3: 8;
3967 uint32_t sic_fwd_transcoeff_threshold_4: 8;
3968 uint32_t sic_fwd_transcoeff_threshold_5: 8;
3969 uint32_t sic_fwd_transcoeff_threshold_6: 8;
3973 struct generic_search_path_delta sp_delta_0;
3974 struct generic_search_path_delta sp_delta_1;
3975 struct generic_search_path_delta sp_delta_2;
3976 struct generic_search_path_delta sp_delta_3;
3980 struct generic_search_path_delta sp_delta_4;
3981 struct generic_search_path_delta sp_delta_5;
3982 struct generic_search_path_delta sp_delta_6;
3983 struct generic_search_path_delta sp_delta_7;
3987 struct generic_search_path_delta sp_delta_8;
3988 struct generic_search_path_delta sp_delta_9;
3989 struct generic_search_path_delta sp_delta_10;
3990 struct generic_search_path_delta sp_delta_11;
3994 struct generic_search_path_delta sp_delta_12;
3995 struct generic_search_path_delta sp_delta_13;
3996 struct generic_search_path_delta sp_delta_14;
3997 struct generic_search_path_delta sp_delta_15;
4001 struct generic_search_path_delta sp_delta_16;
4002 struct generic_search_path_delta sp_delta_17;
4003 struct generic_search_path_delta sp_delta_18;
4004 struct generic_search_path_delta sp_delta_19;
4008 struct generic_search_path_delta sp_delta_20;
4009 struct generic_search_path_delta sp_delta_21;
4010 struct generic_search_path_delta sp_delta_22;
4011 struct generic_search_path_delta sp_delta_23;
4015 struct generic_search_path_delta sp_delta_24;
4016 struct generic_search_path_delta sp_delta_25;
4017 struct generic_search_path_delta sp_delta_26;
4018 struct generic_search_path_delta sp_delta_27;
4022 struct generic_search_path_delta sp_delta_28;
4023 struct generic_search_path_delta sp_delta_29;
4024 struct generic_search_path_delta sp_delta_30;
4025 struct generic_search_path_delta sp_delta_31;
4029 struct generic_search_path_delta sp_delta_32;
4030 struct generic_search_path_delta sp_delta_33;
4031 struct generic_search_path_delta sp_delta_34;
4032 struct generic_search_path_delta sp_delta_35;
4036 struct generic_search_path_delta sp_delta_36;
4037 struct generic_search_path_delta sp_delta_37;
4038 struct generic_search_path_delta sp_delta_38;
4039 struct generic_search_path_delta sp_delta_39;
4043 struct generic_search_path_delta sp_delta_40;
4044 struct generic_search_path_delta sp_delta_41;
4045 struct generic_search_path_delta sp_delta_42;
4046 struct generic_search_path_delta sp_delta_43;
4050 struct generic_search_path_delta sp_delta_44;
4051 struct generic_search_path_delta sp_delta_45;
4052 struct generic_search_path_delta sp_delta_46;
4053 struct generic_search_path_delta sp_delta_47;
4057 struct generic_search_path_delta sp_delta_48;
4058 struct generic_search_path_delta sp_delta_49;
4059 struct generic_search_path_delta sp_delta_50;
4060 struct generic_search_path_delta sp_delta_51;
4064 struct generic_search_path_delta sp_delta_52;
4065 struct generic_search_path_delta sp_delta_53;
4066 struct generic_search_path_delta sp_delta_54;
4067 struct generic_search_path_delta sp_delta_55;
4071 uint32_t intra_4x4_mode_mask: 9;
4072 uint32_t reserved0: 7;
4073 uint32_t intra_8x8_mode_mask: 9;
4074 uint32_t reserved1: 7;
4078 uint32_t intra_16x16_mode_mask: 4;
4079 uint32_t intra_chroma_mode_mask: 4;
4080 uint32_t intra_compute_type: 2;
4081 uint32_t reserved0: 22;
4085 uint32_t skip_val: 16;
4086 uint32_t mult_pred_l0_disable: 8;
4087 uint32_t mult_pred_l1_disable: 8;
4091 uint32_t intra_16x16_nondc_penalty: 8;
4092 uint32_t intra_8x8_nondc_penalty: 8;
4093 uint32_t intra_4x4_nondc_penalty: 8;
4094 uint32_t reserved0: 8;
4098 uint32_t list0_ref_id0_field_parity: 1;
4099 uint32_t list0_ref_id1_field_parity: 1;
4100 uint32_t list0_ref_id2_field_parity: 1;
4101 uint32_t list0_ref_id3_field_parity: 1;
4102 uint32_t list0_ref_id4_field_parity: 1;
4103 uint32_t list0_ref_id5_field_parity: 1;
4104 uint32_t list0_ref_id6_field_parity: 1;
4105 uint32_t list0_ref_id7_field_parity: 1;
4106 uint32_t list1_ref_id0_frm_field_parity: 1;
4107 uint32_t list1_ref_id1_frm_field_parity: 1;
4108 uint32_t widi_intra_refresh_en: 2;
4109 uint32_t arbitray_num_mbs_per_slice: 1;
4110 uint32_t force_non_skip_check: 1;
4111 uint32_t disable_enc_skip_check: 1;
4112 uint32_t enable_direct_bias_adjustment: 1;
4113 uint32_t enable_global_motion_bias_adjustment: 1;
4114 uint32_t b_force_to_skip: 1;
4115 uint32_t reserved0: 6;
4116 uint32_t list1_ref_id0_field_parity: 1;
4117 uint32_t list1_ref_id1_field_parity: 1;
4118 uint32_t mad_enable_falg: 1;
4119 uint32_t roi_enable_flag: 1;
4120 uint32_t enable_mb_flatness_check_optimization: 1;
4121 uint32_t b_direct_mode: 1;
4122 uint32_t mb_brc_enable: 1;
4123 uint32_t b_original_bff: 1;
4127 uint32_t panic_mode_mb_threshold: 16;
4128 uint32_t small_mb_size_in_word: 8;
4129 uint32_t large_mb_size_in_word: 8;
4133 uint32_t num_ref_idx_l0_minus_one: 8;
4134 uint32_t hme_combined_extra_sus: 8;
4135 uint32_t num_ref_idx_l1_minus_one: 8;
4136 uint32_t enable_cabac_work_around: 1;
4137 uint32_t reserved0: 3;
4138 uint32_t is_fwd_frame_short_term_ref: 1;
4139 uint32_t check_all_fractional_enable: 1;
4140 uint32_t hme_combine_overlap: 2;
4144 uint32_t skip_mode_enable: 1;
4145 uint32_t adaptive_enable: 1;
4146 uint32_t bi_mix_dis: 1;
4147 uint32_t reserved0: 2;
4148 uint32_t early_ime_success_enable: 1;
4149 uint32_t reserved1: 1;
4150 uint32_t t8x8_flag_for_inter_enable: 1;
4151 uint32_t reserved2: 16;
4152 uint32_t early_ime_stop: 8;
4157 uint32_t max_len_sp: 8;
4158 uint32_t max_num_su: 8;
4159 uint32_t ref_threshold: 16;
4163 uint32_t reserved0: 8;
4164 uint32_t hme_ref_windows_comb_threshold: 8;
4165 uint32_t ref_width: 8;
4166 uint32_t ref_height: 8;
4170 uint32_t dist_scale_factor_ref_id0_list0: 16;
4171 uint32_t dist_scale_factor_ref_id1_list0: 16;
4175 uint32_t dist_scale_factor_ref_id2_list0: 16;
4176 uint32_t dist_scale_factor_ref_id3_list0: 16;
4180 uint32_t dist_scale_factor_ref_id4_list0: 16;
4181 uint32_t dist_scale_factor_ref_id5_list0: 16;
4185 uint32_t dist_scale_factor_ref_id6_list0: 16;
4186 uint32_t dist_scale_factor_ref_id7_list0: 16;
4190 uint32_t actual_qp_value_for_ref_id0_list0: 8;
4191 uint32_t actual_qp_value_for_ref_id1_list0: 8;
4192 uint32_t actual_qp_value_for_ref_id2_list0: 8;
4193 uint32_t actual_qp_value_for_ref_id3_list0: 8;
4197 uint32_t actual_qp_value_for_ref_id4_list0: 8;
4198 uint32_t actual_qp_value_for_ref_id5_list0: 8;
4199 uint32_t actual_qp_value_for_ref_id6_list0: 8;
4200 uint32_t actual_qp_value_for_ref_id7_list0: 8;
4204 uint32_t actual_qp_value_for_ref_id0_list1: 8;
4205 uint32_t actual_qp_value_for_ref_id1_list1: 8;
4206 uint32_t ref_cost: 16;
4210 uint32_t mb_qp_read_factor: 8;
4211 uint32_t intra_cost_sf: 8;
4212 uint32_t max_vmv_r: 16;
4216 uint32_t widi_intra_refresh_mbx: 16;
4217 uint32_t widi_intra_refresh_unit_in_mb_minus1: 8;
4218 uint32_t widi_intra_refresh_qp_delta: 8;
4222 uint32_t roi_1_x_left: 16;
4223 uint32_t roi_1_y_top: 16;
4227 uint32_t roi_1_x_right: 16;
4228 uint32_t roi_1_y_bottom: 16;
4232 uint32_t roi_2_x_left: 16;
4233 uint32_t roi_2_y_top: 16;
4237 uint32_t roi_2_x_right: 16;
4238 uint32_t roi_2_y_bottom: 16;
4242 uint32_t roi_3_x_left: 16;
4243 uint32_t roi_3_y_top: 16;
4247 uint32_t roi_3_x_right: 16;
4248 uint32_t roi_3_y_bottom: 16;
4252 uint32_t roi_4_x_left: 16;
4253 uint32_t roi_4_y_top: 16;
4257 uint32_t roi_4_x_right: 16;
4258 uint32_t roi_4_y_bottom: 16;
4262 uint32_t roi_1_dqp_prime_y: 8;
4263 uint32_t roi_2_dqp_prime_y: 8;
4264 uint32_t roi_3_dqp_prime_y: 8;
4265 uint32_t roi_4_dqp_prime_y: 8;
4269 uint32_t hme_mv_cost_scaling_factor: 8;
4270 int32_t reserved0: 8;
4271 int32_t widi_intra_refresh_mby: 16;
4279 uint32_t cabac_wa_zone0_threshold: 16;
4280 uint32_t cabac_wa_zone1_threshold: 16;
4284 uint32_t cabac_wa_zone2_threshold: 16;
4285 uint32_t cabac_wa_zone3_threshold: 16;
4289 uint32_t cabac_wa_zone0_intra_min_qp: 8;
4290 uint32_t cabac_wa_zone1_intra_min_qp: 8;
4291 uint32_t cabac_wa_zone2_intra_min_qp: 8;
4292 uint32_t cabac_wa_zone3_intra_min_qp: 8;
4304 uint32_t mb_data_surf_index;
4308 uint32_t mv_data_surf_index;
4312 uint32_t i_dist_surf_index;
4316 uint32_t src_y_surf_index;
4320 uint32_t mb_specific_data_surf_index;
4324 uint32_t aux_vme_out_surf_index;
4328 uint32_t curr_ref_pic_sel_surf_index;
4332 uint32_t hme_mv_pred_fwd_bwd_surf_index;
4336 uint32_t hme_dist_surf_index;
4340 uint32_t slice_map_surf_index;
4344 uint32_t fwd_frm_mb_data_surf_index;
4348 uint32_t fwd_frm_mv_surf_index;
4352 uint32_t mb_qp_buffer;
4356 uint32_t mb_brc_lut;
4360 uint32_t vme_inter_prediction_surf_index;
4364 uint32_t vme_inter_prediction_mr_surf_index;
4368 uint32_t flatness_chk_surf_index;
4372 uint32_t mad_surf_index;
4376 uint32_t force_non_skip_mb_map_surface;
4380 uint32_t widi_wa_surf_index;
4384 uint32_t brc_curbe_surf_index;
4388 uint32_t static_detection_cost_table_index;
4395 } gen8_avc_mbenc_curbe_data;
4397 typedef struct _gen8_avc_frame_brc_update_curbe_data {
4399 uint32_t target_size;
4403 uint32_t frame_number;
4407 uint32_t size_of_pic_headers;
4411 uint32_t start_gadj_frame0: 16;
4412 uint32_t start_gadj_frame1: 16;
4416 uint32_t start_gadj_frame2: 16;
4417 uint32_t start_gadj_frame3: 16;
4421 uint32_t target_size_flag: 8;
4422 uint32_t brc_flag: 8;
4423 uint32_t max_num_paks: 8;
4424 uint32_t cur_frame_type: 8;
4428 uint32_t num_skip_frames: 8;
4429 uint32_t minimum_qp: 8;
4430 uint32_t maximum_qp: 8;
4431 uint32_t widi_intra_refresh_mode: 8;
4435 uint32_t size_skip_frames;
4439 uint32_t start_global_adjust_mult_0: 8;
4440 uint32_t start_global_adjust_mult_1: 8;
4441 uint32_t start_global_adjust_mult_2: 8;
4442 uint32_t start_global_adjust_mult_3: 8;
4446 uint32_t start_global_adjust_mult_4: 8;
4447 uint32_t start_global_adjust_div_0: 8;
4448 uint32_t start_global_adjust_div_1: 8;
4449 uint32_t start_global_adjust_div_2: 8;
4453 uint32_t start_global_adjust_div_3: 8;
4454 uint32_t start_global_adjust_div_4: 8;
4455 uint32_t qp_threshold_0: 8;
4456 uint32_t qp_threshold_1: 8;
4460 uint32_t qp_threshold_2: 8;
4461 uint32_t qp_threshold_3: 8;
4462 uint32_t g_rate_ratio_threshold_0: 8;
4463 uint32_t g_rate_ratio_threshold_1: 8;
4467 uint32_t g_rate_ratio_threshold_2: 8;
4468 uint32_t g_rate_ratio_threshold_3: 8;
4469 uint32_t g_rate_ratio_threshold_4: 8;
4470 uint32_t g_rate_ratio_threshold_5: 8;
4474 uint32_t g_rate_ratio_threshold_qp_0: 8;
4475 uint32_t g_rate_ratio_threshold_qp_1: 8;
4476 uint32_t g_rate_ratio_threshold_qp_2: 8;
4477 uint32_t g_rate_ratio_threshold_qp_3: 8;
4481 uint32_t g_rate_ratio_threshold_qp_4: 8;
4482 uint32_t g_rate_ratio_threshold_qp_5: 8;
4483 uint32_t g_rate_ratio_threshold_qp_6: 8;
4484 uint32_t qp_index_of_cur_pic: 8;
4488 uint32_t widi_qp_intra_resresh: 8;
4489 uint32_t reserved0: 8;
4493 uint32_t widi_intra_refresh_y_pos: 16;
4494 uint32_t widi_intra_refresh_x_pos: 16;
4498 uint32_t widi_intra_refresh_height: 16;
4499 uint32_t widi_intra_refresh_width: 16;
4501 } gen8_avc_frame_brc_update_curbe_data;
4503 typedef struct _gen8_avc_scaling4x_curbe_data {
4505 uint32_t input_picture_width : 16;
4506 uint32_t input_picture_height : 16;
4510 uint32_t input_y_bti;
4514 uint32_t output_y_bti;
4518 uint32_t input_y_bti_bottom_field;
4522 uint32_t output_y_bti_bottom_field;
4526 uint32_t flatness_threshold;
4530 uint32_t enable_mb_flatness_check: 1;
4531 uint32_t enable_mb_variance_output: 1;
4532 uint32_t enable_mb_pixel_average_output: 1;
4533 uint32_t enable_block8x8_statistics_output: 1;
4534 uint32_t reserved0: 28;
4542 uint32_t flatness_output_bti_top_field;
4546 uint32_t flatness_output_bti_bottom_field;
4550 uint32_t mbv_proc_states_bti_top_field;
4554 uint32_t mbv_proc_states_bti_bottom_field;
4556 } gen8_avc_scaling4x_curbe_data;
4558 typedef enum _gen8_avc_binding_table_offset_mbenc {
4559 GEN8_AVC_MBENC_MFC_AVC_PAK_OBJ_CM = 0,
4560 GEN8_AVC_MBENC_IND_MV_DATA_CM = 1,
4561 GEN8_AVC_MBENC_BRC_DISTORTION_CM = 2, // For BRC distortion for I
4562 GEN8_AVC_MBENC_CURR_Y_CM = 3,
4563 GEN8_AVC_MBENC_CURR_UV_CM = 4,
4564 GEN8_AVC_MBENC_MB_SPECIFIC_DATA_CM = 5,
4565 GEN8_AVC_MBENC_AUX_VME_OUT_CM = 6,
4566 GEN8_AVC_MBENC_REFPICSELECT_L0_CM = 7,
4567 GEN8_AVC_MBENC_MV_DATA_FROM_ME_CM = 8,
4568 GEN8_AVC_MBENC_4xME_DISTORTION_CM = 9,
4569 GEN8_AVC_MBENC_SLICEMAP_DATA_CM = 10,
4570 GEN8_AVC_MBENC_FWD_MB_DATA_CM = 11,
4571 GEN8_AVC_MBENC_FWD_MV_DATA_CM = 12,
4572 GEN8_AVC_MBENC_MBQP_CM = 13,
4573 GEN8_AVC_MBENC_MBBRC_CONST_DATA_CM = 14,
4574 GEN8_AVC_MBENC_VME_INTER_PRED_CURR_PIC_IDX_0_CM = 15,
4575 GEN8_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX0_CM = 16,
4576 GEN8_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX0_0_CM = 17,
4577 GEN8_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX1_CM = 18,
4578 GEN8_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX1_0_CM = 19,
4579 GEN8_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX2_CM = 20,
4580 GEN8_AVC_MBENC_RESERVED0_CM = 21,
4581 GEN8_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX3_CM = 22,
4582 GEN8_AVC_MBENC_RESERVED1_CM = 23,
4583 GEN8_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX4_CM = 24,
4584 GEN8_AVC_MBENC_RESERVED2_CM = 25,
4585 GEN8_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX5_CM = 26,
4586 GEN8_AVC_MBENC_RESERVED3_CM = 27,
4587 GEN8_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX6_CM = 28,
4588 GEN8_AVC_MBENC_RESERVED4_CM = 29,
4589 GEN8_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX7_CM = 30,
4590 GEN8_AVC_MBENC_RESERVED5_CM = 31,
4591 GEN8_AVC_MBENC_VME_INTER_PRED_CURR_PIC_IDX_1_CM = 32,
4592 GEN8_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX0_1_CM = 33,
4593 GEN8_AVC_MBENC_RESERVED6_CM = 34,
4594 GEN8_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX1_1_CM = 35,
4595 GEN8_AVC_MBENC_RESERVED7_CM = 36,
4596 GEN8_AVC_MBENC_FLATNESS_CHECK_CM = 37,
4597 GEN8_AVC_MBENC_MAD_DATA_CM = 38,
4598 GEN8_AVC_MBENC_FORCE_NONSKIP_MB_MAP_CM = 39,
4599 GEN8_AVC_MBENC_WIDI_WA_DATA_CM = 40,
4600 GEN8_AVC_MBENC_BRC_CURBE_DATA_CM = 41,
4601 GEN8_AVC_MBENC_STATIC_FRAME_DETECTION_OUTPUT_CM = 42,
4602 GEN8_AVC_MBENC_NUM_SURFACES_CM = 43
4603 } gen8_avc_binding_table_offset_mbenc;
4605 typedef enum _gen8_avc_binding_table_offset_scaling {
4606 GEN8_SCALING_FRAME_SRC_Y_CM = 0,
4607 GEN8_SCALING_FRAME_DST_Y_CM = 1,
4608 GEN8_SCALING_FIELD_TOP_SRC_Y_CM = 0,
4609 GEN8_SCALING_FIELD_TOP_DST_Y_CM = 1,
4610 GEN8_SCALING_FIELD_BOT_SRC_Y_CM = 2,
4611 GEN8_SCALING_FIELD_BOT_DST_Y_CM = 3,
4612 GEN8_SCALING_FRAME_FLATNESS_DST_CM = 4,
4613 GEN8_SCALING_FIELD_TOP_FLATNESS_DST_CM = 4,
4614 GEN8_SCALING_FIELD_BOT_FLATNESS_DST_CM = 5,
4615 GEN8_SCALING_FRAME_MBVPROCSTATS_DST_CM = 6,
4616 GEN8_SCALING_FIELD_TOP_MBVPROCSTATS_DST_CM = 6,
4617 GEN8_SCALING_FIELD_BOT_MBVPROCSTATS_DST_CM = 7,
4618 GEN8_SCALING_NUM_SURFACES_CM = 8
4619 } gen8_avc_binding_table_offset_scaling;
4621 typedef struct _gen8_avc_me_curbe_data {
4623 uint32_t skip_mode_enable: 1;
4624 uint32_t adaptive_enable: 1;
4625 uint32_t bi_mix_dis: 1;
4626 uint32_t reserved0: 2;
4627 uint32_t early_ime_success_enable: 1;
4628 uint32_t reserved1: 1;
4629 uint32_t t8x8_flag_for_inter_enable: 1;
4630 uint32_t reserved2: 16;
4631 uint32_t early_ime_stop: 8;
4635 uint32_t max_num_mvs: 6;
4636 uint32_t reserved0: 10;
4637 uint32_t bi_weight: 6;
4638 uint32_t reserved1: 6;
4639 uint32_t uni_mix_disable: 1;
4640 uint32_t reserved2: 3;
4644 uint32_t max_len_sp: 8;
4645 uint32_t max_num_su: 8;
4646 uint32_t reserved0: 16;
4650 uint32_t src_size: 2;
4651 uint32_t reserved0: 2;
4652 uint32_t mb_type_remap: 2;
4653 uint32_t src_access: 1;
4654 uint32_t ref_access: 1;
4655 uint32_t search_ctrl: 3;
4656 uint32_t dual_search_path_option: 1;
4657 uint32_t sub_pel_mode: 2;
4658 uint32_t skip_type: 1;
4659 uint32_t disable_field_cache_allocation: 1;
4660 uint32_t inter_chroma_mode: 1;
4661 uint32_t ft_enable: 1;
4662 uint32_t bme_disable_fbr: 1;
4663 uint32_t block_based_skip_enable: 1;
4664 uint32_t inter_sad: 2;
4665 uint32_t intra_sad: 2;
4666 uint32_t sub_mb_part_mask: 7;
4667 uint32_t reserved1: 1;
4671 uint32_t reserved0: 8;
4672 uint32_t picture_height_minus1: 8;
4673 uint32_t picture_width: 8;
4674 uint32_t reserved1: 8;
4678 uint32_t reserved0: 8;
4679 uint32_t qp_prime_y: 8;
4680 uint32_t ref_width: 8;
4681 uint32_t ref_height: 8;
4685 uint32_t reserved0: 3;
4686 uint32_t write_distortions: 1;
4687 uint32_t use_mv_from_prev_step: 1;
4688 uint32_t reserved1: 3;
4689 uint32_t super_combine_dist: 8;
4690 uint32_t max_vmvr: 16;
4694 uint32_t reserved0: 16;
4695 uint32_t mv_cost_scale_factor: 2;
4696 uint32_t bilinear_enable: 1;
4697 uint32_t src_field_polarity: 1;
4698 uint32_t weightedsad_harr: 1;
4699 uint32_t ac_only_haar: 1;
4700 uint32_t ref_id_cost_mode: 1;
4701 uint32_t reserved1: 1;
4702 uint32_t skip_center_mask: 8;
4706 uint32_t mode_0_cost: 8;
4707 uint32_t mode_1_cost: 8;
4708 uint32_t mode_2_cost: 8;
4709 uint32_t mode_3_cost: 8;
4713 uint32_t mode_4_cost: 8;
4714 uint32_t mode_5_cost: 8;
4715 uint32_t mode_6_cost: 8;
4716 uint32_t mode_7_cost: 8;
4720 uint32_t mode_8_cost: 8;
4721 uint32_t mode_9_cost: 8;
4722 uint32_t ref_id_cost: 8;
4723 uint32_t chroma_intra_mode_cost: 8;
4727 uint32_t mv_0_cost: 8;
4728 uint32_t mv_1_cost: 8;
4729 uint32_t mv_2_cost: 8;
4730 uint32_t mv_3_cost: 8;
4734 uint32_t mv_4_cost: 8;
4735 uint32_t mv_5_cost: 8;
4736 uint32_t mv_6_cost: 8;
4737 uint32_t mv_7_cost: 8;
4741 uint32_t num_ref_idx_l0_minus1: 8;
4742 uint32_t num_ref_idx_l1_minus1: 8;
4743 uint32_t actual_mb_width: 8;
4744 uint32_t actual_mb_height: 8;
4748 uint32_t l0_ref_id0_field_parity: 1;
4749 uint32_t l0_ref_id1_field_parity: 1;
4750 uint32_t l0_ref_id2_field_parity: 1;
4751 uint32_t l0_ref_id3_field_parity: 1;
4752 uint32_t l0_ref_id4_field_parity: 1;
4753 uint32_t l0_ref_id5_field_parity: 1;
4754 uint32_t l0_ref_id6_field_parity: 1;
4755 uint32_t l0_ref_id7_field_parity: 1;
4756 uint32_t l1_ref_id0_field_parity: 1;
4757 uint32_t l1_ref_id1_field_parity: 1;
4758 uint32_t reserved: 22;
4762 uint32_t prev_mv_read_pos_factor : 8;
4763 uint32_t mv_shift_factor : 8;
4764 uint32_t reserved: 16;
4768 struct generic_search_path_delta sp_delta_0;
4769 struct generic_search_path_delta sp_delta_1;
4770 struct generic_search_path_delta sp_delta_2;
4771 struct generic_search_path_delta sp_delta_3;
4775 struct generic_search_path_delta sp_delta_4;
4776 struct generic_search_path_delta sp_delta_5;
4777 struct generic_search_path_delta sp_delta_6;
4778 struct generic_search_path_delta sp_delta_7;
4782 struct generic_search_path_delta sp_delta_8;
4783 struct generic_search_path_delta sp_delta_9;
4784 struct generic_search_path_delta sp_delta_10;
4785 struct generic_search_path_delta sp_delta_11;
4789 struct generic_search_path_delta sp_delta_12;
4790 struct generic_search_path_delta sp_delta_13;
4791 struct generic_search_path_delta sp_delta_14;
4792 struct generic_search_path_delta sp_delta_15;
4796 struct generic_search_path_delta sp_delta_16;
4797 struct generic_search_path_delta sp_delta_17;
4798 struct generic_search_path_delta sp_delta_18;
4799 struct generic_search_path_delta sp_delta_19;
4803 struct generic_search_path_delta sp_delta_20;
4804 struct generic_search_path_delta sp_delta_21;
4805 struct generic_search_path_delta sp_delta_22;
4806 struct generic_search_path_delta sp_delta_23;
4810 struct generic_search_path_delta sp_delta_24;
4811 struct generic_search_path_delta sp_delta_25;
4812 struct generic_search_path_delta sp_delta_26;
4813 struct generic_search_path_delta sp_delta_27;
4817 struct generic_search_path_delta sp_delta_28;
4818 struct generic_search_path_delta sp_delta_29;
4819 struct generic_search_path_delta sp_delta_30;
4820 struct generic_search_path_delta sp_delta_31;
4824 struct generic_search_path_delta sp_delta_32;
4825 struct generic_search_path_delta sp_delta_33;
4826 struct generic_search_path_delta sp_delta_34;
4827 struct generic_search_path_delta sp_delta_35;
4831 struct generic_search_path_delta sp_delta_36;
4832 struct generic_search_path_delta sp_delta_37;
4833 struct generic_search_path_delta sp_delta_38;
4834 struct generic_search_path_delta sp_delta_39;
4838 struct generic_search_path_delta sp_delta_40;
4839 struct generic_search_path_delta sp_delta_41;
4840 struct generic_search_path_delta sp_delta_42;
4841 struct generic_search_path_delta sp_delta_43;
4845 struct generic_search_path_delta sp_delta_44;
4846 struct generic_search_path_delta sp_delta_45;
4847 struct generic_search_path_delta sp_delta_46;
4848 struct generic_search_path_delta sp_delta_47;
4852 struct generic_search_path_delta sp_delta_48;
4853 struct generic_search_path_delta sp_delta_49;
4854 struct generic_search_path_delta sp_delta_50;
4855 struct generic_search_path_delta sp_delta_51;
4859 struct generic_search_path_delta sp_delta_52;
4860 struct generic_search_path_delta sp_delta_53;
4861 struct generic_search_path_delta sp_delta_54;
4862 struct generic_search_path_delta sp_delta_55;
4874 uint32_t _4x_memv_output_data_surf_index;
4878 uint32_t _16x_32x_memv_input_data_surf_index;
4882 uint32_t _4x_me_output_dist_surf_index;
4886 uint32_t _4x_me_output_brc_dist_surf_index;
4890 uint32_t vme_fwd_inter_pred_surf_index;
4894 uint32_t vme_bdw_inter_pred_surf_index;
4901 } gen8_avc_me_curbe_data;
4903 typedef enum _gen8_avc_binding_table_offset_me {
4904 GEN8_AVC_ME_MV_DATA_SURFACE_CM = 0,
4905 GEN8_AVC_16xME_MV_DATA_SURFACE_CM = 1,
4906 GEN8_AVC_32xME_MV_DATA_SURFACE_CM = 1,
4907 GEN8_AVC_ME_DISTORTION_SURFACE_CM = 2,
4908 GEN8_AVC_ME_BRC_DISTORTION_CM = 3,
4909 GEN8_AVC_ME_RESERVED0_CM = 4,
4910 GEN8_AVC_ME_CURR_FOR_FWD_REF_CM = 5,
4911 GEN8_AVC_ME_FWD_REF_IDX0_CM = 6,
4912 GEN8_AVC_ME_RESERVED1_CM = 7,
4913 GEN8_AVC_ME_FWD_REF_IDX1_CM = 8,
4914 GEN8_AVC_ME_RESERVED2_CM = 9,
4915 GEN8_AVC_ME_FWD_REF_IDX2_CM = 10,
4916 GEN8_AVC_ME_RESERVED3_CM = 11,
4917 GEN8_AVC_ME_FWD_REF_IDX3_CM = 12,
4918 GEN8_AVC_ME_RESERVED4_CM = 13,
4919 GEN8_AVC_ME_FWD_REF_IDX4_CM = 14,
4920 GEN8_AVC_ME_RESERVED5_CM = 15,
4921 GEN8_AVC_ME_FWD_REF_IDX5_CM = 16,
4922 GEN8_AVC_ME_RESERVED6_CM = 17,
4923 GEN8_AVC_ME_FWD_REF_IDX6_CM = 18,
4924 GEN8_AVC_ME_RESERVED7_CM = 19,
4925 GEN8_AVC_ME_FWD_REF_IDX7_CM = 20,
4926 GEN8_AVC_ME_RESERVED8_CM = 21,
4927 GEN8_AVC_ME_CURR_FOR_BWD_REF_CM = 22,
4928 GEN8_AVC_ME_BWD_REF_IDX0_CM = 23,
4929 GEN8_AVC_ME_RESERVED9_CM = 24,
4930 GEN8_AVC_ME_BWD_REF_IDX1_CM = 25,
4931 GEN8_AVC_ME_RESERVED10_CM = 26,
4932 GEN8_AVC_ME_NUM_SURFACES_CM = 27
4933 } gen8_avc_binding_table_offset_me;
4935 #endif /* I965_AVC_ENCODER_H */