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_dscale_ply;
451 kernel_header ply_dscale_2f_ply_2f;
453 /* BRC_I Frame Distortion */
454 kernel_header frame_brc_i_dist;
457 kernel_header ply_2xdscale_ply;
458 kernel_header ply_2xdscale_2f_ply_2f;
460 //Weighted Prediction Kernel
463 } gen9_avc_fei_encoder_kernel_header;
466 The definition for Scaling
468 typedef enum _gen9_avc_binding_table_offset_scaling {
469 GEN9_AVC_SCALING_FRAME_SRC_Y_INDEX = 0,
470 GEN9_AVC_SCALING_FRAME_DST_Y_INDEX = 1,
471 GEN9_AVC_SCALING_FRAME_MBVPROCSTATS_DST_INDEX = 4,
472 GEN9_AVC_SCALING_NUM_SURFACES = 6
473 } gen9_avc_binding_table_offset_scaling;
475 typedef struct _gen9_avc_scaling4x_curbe_data {
477 uint32_t input_picture_width : 16;
478 uint32_t input_picture_height : 16;
482 uint32_t input_y_bti;
486 uint32_t output_y_bti;
498 uint32_t flatness_threshold;
502 uint32_t enable_mb_flatness_check;
506 uint32_t enable_mb_variance_output;
510 uint32_t enable_mb_pixel_average_output;
518 uint32_t mbv_proc_stat_bti;
524 } gen9_avc_scaling4x_curbe_data;
526 typedef struct _gen9_avc_scaling2x_curbe_data {
528 uint32_t input_picture_width : 16;
529 uint32_t input_picture_height : 16;
533 uint32_t reserved1[7];
536 uint32_t input_y_bti;
540 uint32_t output_y_bti;
543 uint32_t reserved2[2];
544 } gen9_avc_scaling2x_curbe_data;
546 #define GEN9_AVC_KERNEL_SCALING_2X_IDX 0
547 #define GEN9_AVC_KERNEL_SCALING_4X_IDX 1
548 #define NUM_GEN9_AVC_KERNEL_SCALING 2
550 struct gen_avc_scaling_context {
551 struct i965_gpe_context gpe_contexts[NUM_GEN9_AVC_KERNEL_SCALING];
555 me structure and define
557 typedef enum _gen9_avc_binding_table_offset_me {
558 GEN9_AVC_ME_MV_DATA_SURFACE_INDEX = 0,
559 GEN9_AVC_16XME_MV_DATA_SURFACE_INDEX = 1,
560 GEN9_AVC_32XME_MV_DATA_SURFACE_INDEX = 1,
561 GEN9_AVC_ME_DISTORTION_SURFACE_INDEX = 2,
562 GEN9_AVC_ME_BRC_DISTORTION_INDEX = 3,
563 GEN9_AVC_ME_RESERVED0_INDEX = 4,
564 GEN9_AVC_ME_CURR_FOR_FWD_REF_INDEX = 5,
565 GEN9_AVC_ME_FWD_REF_IDX0_INDEX = 6,
566 GEN9_AVC_ME_RESERVED1_INDEX = 7,
567 GEN9_AVC_ME_FWD_REF_IDX1_INDEX = 8,
568 GEN9_AVC_ME_RESERVED2_INDEX = 9,
569 GEN9_AVC_ME_FWD_REF_IDX2_INDEX = 10,
570 GEN9_AVC_ME_RESERVED3_INDEX = 11,
571 GEN9_AVC_ME_FWD_REF_IDX3_INDEX = 12,
572 GEN9_AVC_ME_RESERVED4_INDEX = 13,
573 GEN9_AVC_ME_FWD_REF_IDX4_INDEX = 14,
574 GEN9_AVC_ME_RESERVED5_INDEX = 15,
575 GEN9_AVC_ME_FWD_REF_IDX5_INDEX = 16,
576 GEN9_AVC_ME_RESERVED6_INDEX = 17,
577 GEN9_AVC_ME_FWD_REF_IDX6_INDEX = 18,
578 GEN9_AVC_ME_RESERVED7_INDEX = 19,
579 GEN9_AVC_ME_FWD_REF_IDX7_INDEX = 20,
580 GEN9_AVC_ME_RESERVED8_INDEX = 21,
581 GEN9_AVC_ME_CURR_FOR_BWD_REF_INDEX = 22,
582 GEN9_AVC_ME_BWD_REF_IDX0_INDEX = 23,
583 GEN9_AVC_ME_RESERVED9_INDEX = 24,
584 GEN9_AVC_ME_BWD_REF_IDX1_INDEX = 25,
585 GEN9_AVC_ME_VDENC_STREAMIN_INDEX = 26,
586 GEN9_AVC_ME_NUM_SURFACES_INDEX = 27
587 } gen9_avc_binding_table_offset_me;
589 typedef struct _gen9_avc_me_curbe_data {
591 uint32_t skip_mode_enable: 1;
592 uint32_t adaptive_enable: 1;
593 uint32_t bi_mix_dis: 1;
594 uint32_t reserved0: 2;
595 uint32_t early_ime_success_enable: 1;
596 uint32_t reserved1: 1;
597 uint32_t t8x8_flag_for_inter_enable: 1;
598 uint32_t reserved2: 16;
599 uint32_t early_ime_stop: 8;
603 uint32_t max_num_mvs: 6;
604 uint32_t reserved0: 10;
605 uint32_t bi_weight: 6;
606 uint32_t reserved1: 6;
607 uint32_t uni_mix_disable: 1;
608 uint32_t reserved2: 3;
612 uint32_t max_len_sp: 8;
613 uint32_t max_num_su: 8;
614 uint32_t reserved0: 16;
618 uint32_t src_size: 2;
619 uint32_t reserved0: 2;
620 uint32_t mb_type_remap: 2;
621 uint32_t src_access: 1;
622 uint32_t ref_access: 1;
623 uint32_t search_ctrl: 3;
624 uint32_t dual_search_path_option: 1;
625 uint32_t sub_pel_mode: 2;
626 uint32_t skip_type: 1;
627 uint32_t disable_field_cache_allocation: 1;
628 uint32_t inter_chroma_mode: 1;
629 uint32_t ft_enable: 1;
630 uint32_t bme_disable_fbr: 1;
631 uint32_t block_based_skip_enable: 1;
632 uint32_t inter_sad: 2;
633 uint32_t intra_sad: 2;
634 uint32_t sub_mb_part_mask: 7;
635 uint32_t reserved1: 1;
639 uint32_t reserved0: 8;
640 uint32_t picture_height_minus1: 8;
641 uint32_t picture_width: 8;
642 uint32_t reserved1: 8;
646 uint32_t reserved0: 8;
647 uint32_t qp_prime_y: 8;
648 uint32_t ref_width: 8;
649 uint32_t ref_height: 8;
653 uint32_t reserved0: 3;
654 uint32_t write_distortions: 1;
655 uint32_t use_mv_from_prev_step: 1;
656 uint32_t reserved1: 3;
657 uint32_t super_combine_dist: 8;
658 uint32_t max_vmvr: 16;
662 uint32_t reserved0: 16;
663 uint32_t mv_cost_scale_factor: 2;
664 uint32_t bilinear_enable: 1;
665 uint32_t src_field_polarity: 1;
666 uint32_t weightedsad_harr: 1;
667 uint32_t ac_only_haar: 1;
668 uint32_t ref_id_cost_mode: 1;
669 uint32_t reserved1: 1;
670 uint32_t skip_center_mask: 8;
674 uint32_t mode_0_cost: 8;
675 uint32_t mode_1_cost: 8;
676 uint32_t mode_2_cost: 8;
677 uint32_t mode_3_cost: 8;
681 uint32_t mode_4_cost: 8;
682 uint32_t mode_5_cost: 8;
683 uint32_t mode_6_cost: 8;
684 uint32_t mode_7_cost: 8;
688 uint32_t mode_8_cost: 8;
689 uint32_t mode_9_cost: 8;
690 uint32_t ref_id_cost: 8;
691 uint32_t chroma_intra_mode_cost: 8;
695 uint32_t mv_0_cost: 8;
696 uint32_t mv_1_cost: 8;
697 uint32_t mv_2_cost: 8;
698 uint32_t mv_3_cost: 8;
702 uint32_t mv_4_cost: 8;
703 uint32_t mv_5_cost: 8;
704 uint32_t mv_6_cost: 8;
705 uint32_t mv_7_cost: 8;
709 uint32_t num_ref_idx_l0_minus1: 8;
710 uint32_t num_ref_idx_l1_minus1: 8;
711 uint32_t ref_streamin_cost: 8;
712 uint32_t roi_enable: 3;
713 uint32_t reserved0: 5;
717 uint32_t l0_ref_pic_polarity_bits: 8;
718 uint32_t l1_ref_pic_polarity_bits: 2;
719 uint32_t reserved: 22;
723 uint32_t prev_mv_read_pos_factor : 8;
724 uint32_t mv_shift_factor : 8;
725 uint32_t reserved: 16;
729 struct generic_search_path_delta sp_delta_0;
730 struct generic_search_path_delta sp_delta_1;
731 struct generic_search_path_delta sp_delta_2;
732 struct generic_search_path_delta sp_delta_3;
736 struct generic_search_path_delta sp_delta_4;
737 struct generic_search_path_delta sp_delta_5;
738 struct generic_search_path_delta sp_delta_6;
739 struct generic_search_path_delta sp_delta_7;
743 struct generic_search_path_delta sp_delta_8;
744 struct generic_search_path_delta sp_delta_9;
745 struct generic_search_path_delta sp_delta_10;
746 struct generic_search_path_delta sp_delta_11;
750 struct generic_search_path_delta sp_delta_12;
751 struct generic_search_path_delta sp_delta_13;
752 struct generic_search_path_delta sp_delta_14;
753 struct generic_search_path_delta sp_delta_15;
757 struct generic_search_path_delta sp_delta_16;
758 struct generic_search_path_delta sp_delta_17;
759 struct generic_search_path_delta sp_delta_18;
760 struct generic_search_path_delta sp_delta_19;
764 struct generic_search_path_delta sp_delta_20;
765 struct generic_search_path_delta sp_delta_21;
766 struct generic_search_path_delta sp_delta_22;
767 struct generic_search_path_delta sp_delta_23;
771 struct generic_search_path_delta sp_delta_24;
772 struct generic_search_path_delta sp_delta_25;
773 struct generic_search_path_delta sp_delta_26;
774 struct generic_search_path_delta sp_delta_27;
778 struct generic_search_path_delta sp_delta_28;
779 struct generic_search_path_delta sp_delta_29;
780 struct generic_search_path_delta sp_delta_30;
781 struct generic_search_path_delta sp_delta_31;
785 struct generic_search_path_delta sp_delta_32;
786 struct generic_search_path_delta sp_delta_33;
787 struct generic_search_path_delta sp_delta_34;
788 struct generic_search_path_delta sp_delta_35;
792 struct generic_search_path_delta sp_delta_36;
793 struct generic_search_path_delta sp_delta_37;
794 struct generic_search_path_delta sp_delta_38;
795 struct generic_search_path_delta sp_delta_39;
799 struct generic_search_path_delta sp_delta_40;
800 struct generic_search_path_delta sp_delta_41;
801 struct generic_search_path_delta sp_delta_42;
802 struct generic_search_path_delta sp_delta_43;
806 struct generic_search_path_delta sp_delta_44;
807 struct generic_search_path_delta sp_delta_45;
808 struct generic_search_path_delta sp_delta_46;
809 struct generic_search_path_delta sp_delta_47;
813 struct generic_search_path_delta sp_delta_48;
814 struct generic_search_path_delta sp_delta_49;
815 struct generic_search_path_delta sp_delta_50;
816 struct generic_search_path_delta sp_delta_51;
820 struct generic_search_path_delta sp_delta_52;
821 struct generic_search_path_delta sp_delta_53;
822 struct generic_search_path_delta sp_delta_54;
823 struct generic_search_path_delta sp_delta_55;
827 uint32_t actual_mb_width: 16;
828 uint32_t actual_mb_height: 16;
836 uint32_t _4x_memv_output_data_surf_index;
840 uint32_t _16x_32x_memv_input_data_surf_index;
844 uint32_t _4x_me_output_dist_surf_index;
848 uint32_t _4x_me_output_brc_dist_surf_index;
852 uint32_t vme_fwd_inter_pred_surf_index;
856 uint32_t vme_bdw_inter_pred_surf_index;
863 } gen9_avc_me_curbe_data;
865 /* FeiPreEncFixme: name change fei to preenc */
866 typedef struct _gen9_avc_fei_me_curbe_data {
868 uint32_t skip_mode_enable: 1;
869 uint32_t adaptive_enable: 1;
870 uint32_t bi_mix_dis: 1;
871 uint32_t reserved0: 2;
872 uint32_t early_ime_success_enable: 1;
873 uint32_t reserved1: 1;
874 uint32_t t8x8_flag_for_inter_enable: 1;
875 uint32_t reserved2: 16;
876 uint32_t early_ime_stop: 8;
880 uint32_t max_num_mvs: 6;
881 uint32_t reserved0: 10;
882 uint32_t bi_weight: 6;
883 uint32_t reserved1: 6;
884 uint32_t uni_mix_disable: 1;
885 uint32_t reserved2: 3;
889 uint32_t max_len_sp: 8;
890 uint32_t max_num_su: 8;
891 uint32_t reserved0: 16;
895 uint32_t src_size: 2;
896 uint32_t reserved0: 2;
897 uint32_t mb_type_remap: 2;
898 uint32_t src_access: 1;
899 uint32_t ref_access: 1;
900 uint32_t search_ctrl: 3;
901 uint32_t dual_search_path_option: 1;
902 uint32_t sub_pel_mode: 2;
903 uint32_t skip_type: 1;
904 uint32_t disable_field_cache_allocation: 1;
905 uint32_t inter_chroma_mode: 1;
906 uint32_t ft_enable: 1;
907 uint32_t bme_disable_fbr: 1;
908 uint32_t block_based_skip_enable: 1;
909 uint32_t inter_sad: 2;
910 uint32_t intra_sad: 2;
911 uint32_t sub_mb_part_mask: 7;
912 uint32_t reserved1: 1;
916 uint32_t reserved0: 8;
917 uint32_t picture_height_minus1: 8;
918 uint32_t picture_width: 8;
919 uint32_t reserved1: 8;
923 uint32_t reserved0: 8;
924 uint32_t qp_prime_y: 8;
925 uint32_t ref_width: 8;
926 uint32_t ref_height: 8;
930 uint32_t reserved0: 3;
931 uint32_t write_distortions: 1;
932 uint32_t use_mv_from_prev_step: 1;
933 uint32_t reserved1: 3;
934 uint32_t super_combine_dist: 8;
935 uint32_t max_vmvr: 16;
939 uint32_t reserved0: 16;
940 uint32_t mv_cost_scale_factor: 2;
941 uint32_t bilinear_enable: 1;
942 uint32_t src_field_polarity: 1;
943 uint32_t weightedsad_harr: 1;
944 uint32_t ac_only_haar: 1;
945 uint32_t ref_id_cost_mode: 1;
946 uint32_t reserved1: 1;
947 uint32_t skip_center_mask: 8;
951 uint32_t mode_0_cost: 8;
952 uint32_t mode_1_cost: 8;
953 uint32_t mode_2_cost: 8;
954 uint32_t mode_3_cost: 8;
958 uint32_t mode_4_cost: 8;
959 uint32_t mode_5_cost: 8;
960 uint32_t mode_6_cost: 8;
961 uint32_t mode_7_cost: 8;
965 uint32_t mode_8_cost: 8;
966 uint32_t mode_9_cost: 8;
967 uint32_t ref_id_cost: 8;
968 uint32_t chroma_intra_mode_cost: 8;
972 uint32_t mv_0_cost: 8;
973 uint32_t mv_1_cost: 8;
974 uint32_t mv_2_cost: 8;
975 uint32_t mv_3_cost: 8;
979 uint32_t mv_4_cost: 8;
980 uint32_t mv_5_cost: 8;
981 uint32_t mv_6_cost: 8;
982 uint32_t mv_7_cost: 8;
986 uint32_t num_ref_idx_l0_minus1: 8;
987 uint32_t num_ref_idx_l1_minus1: 8;
988 uint32_t actual_mb_width: 8;
989 uint32_t actual_mb_height: 8;
993 uint32_t l0_ref_pic_polarity_bits: 8;
994 uint32_t l1_ref_pic_polarity_bits: 2;
995 uint32_t reserved: 22;
999 uint32_t prev_mv_read_pos_factor : 8;
1000 uint32_t mv_shift_factor : 8;
1001 uint32_t reserved: 16;
1005 struct generic_search_path_delta sp_delta_0;
1006 struct generic_search_path_delta sp_delta_1;
1007 struct generic_search_path_delta sp_delta_2;
1008 struct generic_search_path_delta sp_delta_3;
1012 struct generic_search_path_delta sp_delta_4;
1013 struct generic_search_path_delta sp_delta_5;
1014 struct generic_search_path_delta sp_delta_6;
1015 struct generic_search_path_delta sp_delta_7;
1019 struct generic_search_path_delta sp_delta_8;
1020 struct generic_search_path_delta sp_delta_9;
1021 struct generic_search_path_delta sp_delta_10;
1022 struct generic_search_path_delta sp_delta_11;
1026 struct generic_search_path_delta sp_delta_12;
1027 struct generic_search_path_delta sp_delta_13;
1028 struct generic_search_path_delta sp_delta_14;
1029 struct generic_search_path_delta sp_delta_15;
1033 struct generic_search_path_delta sp_delta_16;
1034 struct generic_search_path_delta sp_delta_17;
1035 struct generic_search_path_delta sp_delta_18;
1036 struct generic_search_path_delta sp_delta_19;
1040 struct generic_search_path_delta sp_delta_20;
1041 struct generic_search_path_delta sp_delta_21;
1042 struct generic_search_path_delta sp_delta_22;
1043 struct generic_search_path_delta sp_delta_23;
1047 struct generic_search_path_delta sp_delta_24;
1048 struct generic_search_path_delta sp_delta_25;
1049 struct generic_search_path_delta sp_delta_26;
1050 struct generic_search_path_delta sp_delta_27;
1054 struct generic_search_path_delta sp_delta_28;
1055 struct generic_search_path_delta sp_delta_29;
1056 struct generic_search_path_delta sp_delta_30;
1057 struct generic_search_path_delta sp_delta_31;
1061 struct generic_search_path_delta sp_delta_32;
1062 struct generic_search_path_delta sp_delta_33;
1063 struct generic_search_path_delta sp_delta_34;
1064 struct generic_search_path_delta sp_delta_35;
1068 struct generic_search_path_delta sp_delta_36;
1069 struct generic_search_path_delta sp_delta_37;
1070 struct generic_search_path_delta sp_delta_38;
1071 struct generic_search_path_delta sp_delta_39;
1075 struct generic_search_path_delta sp_delta_40;
1076 struct generic_search_path_delta sp_delta_41;
1077 struct generic_search_path_delta sp_delta_42;
1078 struct generic_search_path_delta sp_delta_43;
1082 struct generic_search_path_delta sp_delta_44;
1083 struct generic_search_path_delta sp_delta_45;
1084 struct generic_search_path_delta sp_delta_46;
1085 struct generic_search_path_delta sp_delta_47;
1089 struct generic_search_path_delta sp_delta_48;
1090 struct generic_search_path_delta sp_delta_49;
1091 struct generic_search_path_delta sp_delta_50;
1092 struct generic_search_path_delta sp_delta_51;
1096 struct generic_search_path_delta sp_delta_52;
1097 struct generic_search_path_delta sp_delta_53;
1098 struct generic_search_path_delta sp_delta_54;
1099 struct generic_search_path_delta sp_delta_55;
1111 uint32_t _4x_memv_output_data_surf_index;
1115 uint32_t _16x_32x_memv_input_data_surf_index;
1119 uint32_t _4x_me_output_dist_surf_index;
1123 uint32_t _4x_me_output_brc_dist_surf_index;
1127 uint32_t vme_fwd_inter_pred_surf_index;
1131 uint32_t vme_bdw_inter_pred_surf_index;
1138 } gen9_avc_fei_me_curbe_data;
1140 #define GEN9_AVC_KERNEL_ME_P_IDX 0
1141 #define GEN9_AVC_KERNEL_ME_B_IDX 1
1142 #define NUM_GEN9_AVC_KERNEL_ME 2
1144 struct gen_avc_me_context {
1145 struct i965_gpe_context gpe_contexts[NUM_GEN9_AVC_KERNEL_ME];
1149 frame/mb brc structure and define
1151 typedef enum _gen9_avc_binding_table_offset_brc_init_reset {
1152 GEN9_AVC_BRC_INIT_RESET_HISTORY_INDEX = 0,
1153 GEN9_AVC_BRC_INIT_RESET_DISTORTION_INDEX,
1154 GEN9_AVC_BRC_INIT_RESET_NUM_SURFACES
1155 } gen9_avc_binding_table_offset_brc_init_reset;
1157 typedef struct _gen9_avc_brc_init_reset_curbe_data {
1159 uint32_t profile_level_max_frame;
1163 uint32_t init_buf_full_in_bits;
1167 uint32_t buf_size_in_bits;
1171 uint32_t average_bit_rate;
1175 uint32_t max_bit_rate;
1179 uint32_t min_bit_rate;
1183 uint32_t frame_rate_m;
1187 uint32_t frame_rate_d;
1191 uint32_t brc_flag: 16;
1197 uint32_t frame_width_in_bytes: 16;
1201 uint32_t frame_height_in_bytes: 16;
1202 uint32_t avbr_accuracy: 16;
1206 uint32_t avbr_convergence: 16;
1207 uint32_t min_qp: 16;
1211 uint32_t max_qp: 16;
1212 uint32_t no_slices: 16;
1216 uint32_t instant_rate_threshold_0_p: 8;
1217 uint32_t instant_rate_threshold_1_p: 8;
1218 uint32_t instant_rate_threshold_2_p: 8;
1219 uint32_t instant_rate_threshold_3_p: 8;
1223 uint32_t instant_rate_threshold_0_b: 8;
1224 uint32_t instant_rate_threshold_1_b: 8;
1225 uint32_t instant_rate_threshold_2_b: 8;
1226 uint32_t instant_rate_threshold_3_b: 8;
1230 uint32_t instant_rate_threshold_0_i: 8;
1231 uint32_t instant_rate_threshold_1_i: 8;
1232 uint32_t instant_rate_threshold_2_i: 8;
1233 uint32_t instant_rate_threshold_3_i: 8;
1237 uint32_t deviation_threshold_0_pand_b: 8;
1238 uint32_t deviation_threshold_1_pand_b: 8;
1239 uint32_t deviation_threshold_2_pand_b: 8;
1240 uint32_t deviation_threshold_3_pand_b: 8;
1244 uint32_t deviation_threshold_4_pand_b: 8;
1245 uint32_t deviation_threshold_5_pand_b: 8;
1246 uint32_t deviation_threshold_6_pand_b: 8;
1247 uint32_t deviation_threshold_7_pand_b: 8;
1251 uint32_t deviation_threshold_0_vbr: 8;
1252 uint32_t deviation_threshold_1_vbr: 8;
1253 uint32_t deviation_threshold_2_vbr: 8;
1254 uint32_t deviation_threshold_3_vbr: 8;
1258 uint32_t deviation_threshold_4_vbr: 8;
1259 uint32_t deviation_threshold_5_vbr: 8;
1260 uint32_t deviation_threshold_6_vbr: 8;
1261 uint32_t deviation_threshold_7_vbr: 8;
1265 uint32_t deviation_threshold_0_i: 8;
1266 uint32_t deviation_threshold_1_i: 8;
1267 uint32_t deviation_threshold_2_i: 8;
1268 uint32_t deviation_threshold_3_i: 8;
1272 uint32_t deviation_threshold_4_i: 8;
1273 uint32_t deviation_threshold_5_i: 8;
1274 uint32_t deviation_threshold_6_i: 8;
1275 uint32_t deviation_threshold_7_i: 8;
1279 uint32_t initial_qp_i: 8;
1280 uint32_t initial_qp_p: 8;
1281 uint32_t initial_qp_b: 8;
1282 uint32_t sliding_window_size: 8;
1289 } gen9_avc_brc_init_reset_curbe_data;
1291 typedef enum _gen9_avc_binding_table_offset_frame_brc_update {
1292 GEN9_AVC_FRAME_BRC_UPDATE_HISTORY_INDEX = 0,
1293 GEN9_AVC_FRAME_BRC_UPDATE_PAK_STATISTICS_OUTPUT_INDEX = 1,
1294 GEN9_AVC_FRAME_BRC_UPDATE_IMAGE_STATE_READ_INDEX = 2,
1295 GEN9_AVC_FRAME_BRC_UPDATE_IMAGE_STATE_WRITE_INDEX = 3,
1296 GEN9_AVC_FRAME_BRC_UPDATE_MBENC_CURBE_READ_INDEX = 4,
1297 GEN9_AVC_FRAME_BRC_UPDATE_MBENC_CURBE_WRITE_INDEX = 5,
1298 GEN9_AVC_FRAME_BRC_UPDATE_DISTORTION_INDEX = 6,
1299 GEN9_AVC_FRAME_BRC_UPDATE_CONSTANT_DATA_INDEX = 7,
1300 GEN9_AVC_FRAME_BRC_UPDATE_MB_STATUS_INDEX = 8,
1301 GEN9_AVC_FRAME_BRC_UPDATE_NUM_SURFACES_INDEX = 9
1302 } gen9_avc_binding_table_offset_frame_brc_update;
1304 typedef struct _gen9_avc_frame_brc_update_curbe_data {
1306 uint32_t target_size;
1310 uint32_t frame_number;
1314 uint32_t size_of_pic_headers;
1318 uint32_t start_gadj_frame0: 16;
1319 uint32_t start_gadj_frame1: 16;
1323 uint32_t start_gadj_frame2: 16;
1324 uint32_t start_gadj_frame3: 16;
1328 uint32_t target_size_flag: 8;
1329 uint32_t brc_flag: 8;
1330 uint32_t max_num_paks: 8;
1331 uint32_t cur_frame_type: 8;
1335 uint32_t num_skip_frames: 8;
1336 uint32_t minimum_qp: 8;
1337 uint32_t maximum_qp: 8;
1338 uint32_t enable_force_skip: 1;
1339 uint32_t enable_sliding_window: 1;
1340 uint32_t reserved: 6;
1344 uint32_t size_skip_frames;
1348 uint32_t start_global_adjust_mult_0: 8;
1349 uint32_t start_global_adjust_mult_1: 8;
1350 uint32_t start_global_adjust_mult_2: 8;
1351 uint32_t start_global_adjust_mult_3: 8;
1355 uint32_t start_global_adjust_mult_4: 8;
1356 uint32_t start_global_adjust_div_0: 8;
1357 uint32_t start_global_adjust_div_1: 8;
1358 uint32_t start_global_adjust_div_2: 8;
1362 uint32_t start_global_adjust_div_3: 8;
1363 uint32_t start_global_adjust_div_4: 8;
1364 uint32_t qp_threshold_0: 8;
1365 uint32_t qp_threshold_1: 8;
1369 uint32_t qp_threshold_2: 8;
1370 uint32_t qp_threshold_3: 8;
1371 uint32_t g_rate_ratio_threshold_0: 8;
1372 uint32_t g_rate_ratio_threshold_1: 8;
1376 uint32_t g_rate_ratio_threshold_2: 8;
1377 uint32_t g_rate_ratio_threshold_3: 8;
1378 uint32_t g_rate_ratio_threshold_4: 8;
1379 uint32_t g_rate_ratio_threshold_5: 8;
1383 uint32_t g_rate_ratio_threshold_qp_0: 8;
1384 uint32_t g_rate_ratio_threshold_qp_1: 8;
1385 uint32_t g_rate_ratio_threshold_qp_2: 8;
1386 uint32_t g_rate_ratio_threshold_qp_3: 8;
1390 uint32_t g_rate_ratio_threshold_qp_4: 8;
1391 uint32_t g_rate_ratio_threshold_qp_5: 8;
1392 uint32_t g_rate_ratio_threshold_qp_6: 8;
1393 uint32_t qp_index_of_cur_pic: 8;
1397 uint32_t reserved0: 8;
1398 uint32_t enable_roi: 8;
1399 uint32_t reserved1: 8;
1400 uint32_t reserved2: 8;
1416 uint32_t user_max_frame;
1435 } gen9_avc_frame_brc_update_curbe_data;
1437 typedef enum _gen9_avc_binding_table_offset_mb_brc_update {
1438 GEN9_AVC_MB_BRC_UPDATE_HISTORY_INDEX = 0,
1439 GEN9_AVC_MB_BRC_UPDATE_MB_QP_INDEX = 1,
1440 GEN9_AVC_MB_BRC_UPDATE_ROI_INDEX = 2,
1441 GEN9_AVC_MB_BRC_UPDATE_MB_STATUS_INDEX = 3,
1442 GEN9_AVC_MB_BRC_UPDATE_NUM_SURFACES_INDEX = 4
1443 } gen9_avc_binding_table_offset_mb_brc_update;
1445 typedef struct _gen9_avc_mb_brc_curbe_data {
1447 uint32_t cur_frame_type: 8;
1448 uint32_t enable_roi: 8;
1449 uint32_t roi_ratio: 8;
1450 uint32_t reserved0: 8;
1478 } gen9_avc_mb_brc_curbe_data;
1480 #define GEN9_AVC_KERNEL_BRC_INIT 0
1481 #define GEN9_AVC_KERNEL_BRC_FRAME_UPDATE 1
1482 #define GEN9_AVC_KERNEL_BRC_RESET 2
1483 #define GEN9_AVC_KERNEL_BRC_I_FRAME_DIST 3
1484 #define GEN9_AVC_KERNEL_BRC_BLOCK_COPY 4
1485 #define GEN9_AVC_KERNEL_BRC_MB_UPDATE 5
1486 #define NUM_GEN9_AVC_KERNEL_BRC 6
1488 struct gen_avc_brc_context {
1489 struct i965_gpe_context gpe_contexts[NUM_GEN9_AVC_KERNEL_BRC];
1493 wp structure and define
1495 typedef enum _gen9_avc_binding_table_offset_wp {
1496 GEN9_AVC_WP_INPUT_REF_SURFACE_INDEX = 0,
1497 GEN9_AVC_WP_OUTPUT_SCALED_SURFACE_INDEX = 1,
1498 GEN9_AVC_WP_NUM_SURFACES_INDEX = 2
1499 } gen9_avc_binding_table_offset_wp;
1501 typedef struct _gen9_avc_wp_curbe_data {
1503 uint32_t default_weight: 16;
1504 uint32_t default_offset: 16;
1508 uint32_t roi_0_x_left: 16;
1509 uint32_t roi_0_y_top: 16;
1513 uint32_t roi_0_x_right: 16;
1514 uint32_t roi_0_y_bottom: 16;
1518 uint32_t roi_0_weight: 16;
1519 uint32_t roi_0_offset: 16;
1523 uint32_t roi_1_x_left: 16;
1524 uint32_t roi_1_y_top: 16;
1528 uint32_t roi_1_x_right: 16;
1529 uint32_t roi_1_y_bottom: 16;
1533 uint32_t roi_1_weight: 16;
1534 uint32_t roi_1_offset: 16;
1538 uint32_t roi_2_x_left: 16;
1539 uint32_t roi_2_y_top: 16;
1543 uint32_t roi_2_x_right: 16;
1544 uint32_t roi_2_y_bottom: 16;
1548 uint32_t roi_2_weight: 16;
1549 uint32_t roi_2_offset: 16;
1553 uint32_t roi_3_x_left: 16;
1554 uint32_t roi_3_y_top: 16;
1558 uint32_t roi_3_x_right: 16;
1559 uint32_t roi_3_y_bottom: 16;
1563 uint32_t roi_3_weight: 16;
1564 uint32_t roi_3_offset: 16;
1568 uint32_t roi_4_x_left: 16;
1569 uint32_t roi_4_y_top: 16;
1573 uint32_t roi_4_x_right: 16;
1574 uint32_t roi_4_y_bottom: 16;
1578 uint32_t roi_4_weight: 16;
1579 uint32_t roi_4_offset: 16;
1583 uint32_t roi_5_x_left: 16;
1584 uint32_t roi_5_y_top: 16;
1588 uint32_t roi_5_x_right: 16;
1589 uint32_t roi_5_y_bottom: 16;
1593 uint32_t roi_5_weight: 16;
1594 uint32_t roi_5_offset: 16;
1598 uint32_t roi_6_x_left: 16;
1599 uint32_t roi_6_y_top: 16;
1603 uint32_t roi_6_x_right: 16;
1604 uint32_t roi_6_y_bottom: 16;
1608 uint32_t roi_6_weight: 16;
1609 uint32_t roi_6_offset: 16;
1613 uint32_t roi_7_x_left: 16;
1614 uint32_t roi_7_y_top: 16;
1618 uint32_t roi_7_x_right: 16;
1619 uint32_t roi_7_y_bottom: 16;
1623 uint32_t roi_7_weight: 16;
1624 uint32_t roi_7_offset: 16;
1628 uint32_t roi_8_x_left: 16;
1629 uint32_t roi_8_y_top: 16;
1633 uint32_t roi_8_x_right: 16;
1634 uint32_t roi_8_y_bottom: 16;
1638 uint32_t roi_8_weight: 16;
1639 uint32_t roi_8_offset: 16;
1643 uint32_t roi_9_x_left: 16;
1644 uint32_t roi_9_y_top: 16;
1648 uint32_t roi_9_x_right: 16;
1649 uint32_t roi_9_y_bottom: 16;
1653 uint32_t roi_9_weight: 16;
1654 uint32_t roi_9_offset: 16;
1658 uint32_t roi_10_x_left: 16;
1659 uint32_t roi_10_y_top: 16;
1663 uint32_t roi_10_x_right: 16;
1664 uint32_t roi_10_y_bottom: 16;
1668 uint32_t roi_10_weight: 16;
1669 uint32_t roi_10_offset: 16;
1673 uint32_t roi_11_x_left: 16;
1674 uint32_t roi_11_y_top: 16;
1678 uint32_t roi_11_x_right: 16;
1679 uint32_t roi_11_y_bottom: 16;
1683 uint32_t roi_11_weight: 16;
1684 uint32_t roi_11_offset: 16;
1688 uint32_t roi_12_x_left: 16;
1689 uint32_t roi_12_y_top: 16;
1693 uint32_t roi_12_x_right: 16;
1694 uint32_t roi_12_y_bottom: 16;
1698 uint32_t roi_12_weight: 16;
1699 uint32_t roi_12_offset: 16;
1703 uint32_t roi_13_x_left: 16;
1704 uint32_t roi_13_y_top: 16;
1708 uint32_t roi_13_x_right: 16;
1709 uint32_t roi_13_y_bottom: 16;
1713 uint32_t roi_13_weight: 16;
1714 uint32_t roi_13_offset: 16;
1718 uint32_t roi_14_x_left: 16;
1719 uint32_t roi_14_y_top: 16;
1723 uint32_t roi_14_x_right: 16;
1724 uint32_t roi_14_y_bottom: 16;
1728 uint32_t roi_14_weight: 16;
1729 uint32_t roi_14_offset: 16;
1733 uint32_t roi_15_x_left: 16;
1734 uint32_t roi_15_y_top: 16;
1738 uint32_t roi_15_x_right: 16;
1739 uint32_t roi_15_y_bottom: 16;
1743 uint32_t roi_15_weight: 16;
1744 uint32_t roi_15_offset: 16;
1748 uint32_t input_surface;
1752 uint32_t output_surface;
1757 } gen9_avc_wp_curbe_data;
1759 struct gen_avc_wp_context {
1760 struct i965_gpe_context gpe_contexts;
1764 mbenc structure and define
1766 typedef enum _gen9_avc_binding_table_offset_mbenc {
1767 GEN9_AVC_MBENC_MFC_AVC_PAK_OBJ_INDEX = 0,
1768 GEN9_AVC_MBENC_IND_MV_DATA_INDEX = 1,
1769 GEN9_AVC_MBENC_BRC_DISTORTION_INDEX = 2, // FOR BRC DISTORTION FOR I
1770 GEN9_AVC_MBENC_CURR_Y_INDEX = 3,
1771 GEN9_AVC_MBENC_CURR_UV_INDEX = 4,
1772 GEN9_AVC_MBENC_MB_SPECIFIC_DATA_INDEX = 5,
1773 GEN9_AVC_MBENC_AUX_VME_OUT_INDEX = 6,
1774 GEN9_AVC_MBENC_REFPICSELECT_L0_INDEX = 7,
1775 GEN9_AVC_MBENC_MV_DATA_FROM_ME_INDEX = 8,
1776 GEN9_AVC_MBENC_4XME_DISTORTION_INDEX = 9,
1777 GEN9_AVC_MBENC_SLICEMAP_DATA_INDEX = 10,
1778 GEN9_AVC_MBENC_FWD_MB_DATA_INDEX = 11,
1779 GEN9_AVC_MBENC_FWD_MV_DATA_INDEX = 12,
1780 GEN9_AVC_MBENC_MBQP_INDEX = 13,
1781 GEN9_AVC_MBENC_MBBRC_CONST_DATA_INDEX = 14,
1782 GEN9_AVC_MBENC_VME_INTER_PRED_CURR_PIC_IDX_0_INDEX = 15,
1783 GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX0_INDEX = 16,
1784 GEN9_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX0_0_INDEX = 17,
1785 GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX1_INDEX = 18,
1786 GEN9_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX1_0_INDEX = 19,
1787 GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX2_INDEX = 20,
1788 GEN9_AVC_MBENC_RESERVED0_INDEX = 21,
1789 GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX3_INDEX = 22,
1790 GEN9_AVC_MBENC_RESERVED1_INDEX = 23,
1791 GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX4_INDEX = 24,
1792 GEN9_AVC_MBENC_RESERVED2_INDEX = 25,
1793 GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX5_INDEX = 26,
1794 GEN9_AVC_MBENC_RESERVED3_INDEX = 27,
1795 GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX6_INDEX = 28,
1796 GEN9_AVC_MBENC_RESERVED4_INDEX = 29,
1797 GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX7_INDEX = 30,
1798 GEN9_AVC_MBENC_RESERVED5_INDEX = 31,
1799 GEN9_AVC_MBENC_VME_INTER_PRED_CURR_PIC_IDX_1_INDEX = 32,
1800 GEN9_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX0_1_INDEX = 33,
1801 GEN9_AVC_MBENC_RESERVED6_INDEX = 34,
1802 GEN9_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX1_1_INDEX = 35,
1803 GEN9_AVC_MBENC_RESERVED7_INDEX = 36,
1804 GEN9_AVC_MBENC_MB_STATS_INDEX = 37,
1805 GEN9_AVC_MBENC_MAD_DATA_INDEX = 38,
1806 GEN9_AVC_MBENC_FORCE_NONSKIP_MB_MAP_INDEX = 39,
1807 GEN9_AVC_MBENC_WIDI_WA_INDEX = 40,
1808 GEN9_AVC_MBENC_BRC_CURBE_DATA_INDEX = 41,
1809 GEN9_AVC_MBENC_SFD_COST_TABLE_INDEX = 42,
1810 GEN9_AVC_MBENC_MV_PREDICTOR_INDEX = 43,
1811 GEN9_AVC_MBENC_NUM_SURFACES_INDEX = 44
1812 } gen9_avc_binding_table_offset_mbenc;
1814 typedef struct _gen9_avc_mbenc_curbe_data {
1816 uint32_t skip_mode_enable: 1;
1817 uint32_t adaptive_enable: 1;
1818 uint32_t bi_mix_dis: 1;
1819 uint32_t reserved0: 2;
1820 uint32_t early_ime_success_enable: 1;
1821 uint32_t reserved1: 1;
1822 uint32_t t8x8_flag_for_inter_enable: 1;
1823 uint32_t reserved2: 16;
1824 uint32_t early_ime_stop: 8;
1828 uint32_t max_num_mvs: 6;
1829 uint32_t reserved0: 10;
1830 uint32_t bi_weight: 6;
1831 uint32_t reserved1: 6;
1832 uint32_t uni_mix_disable: 1;
1833 uint32_t reserved2: 3;
1837 uint32_t max_len_sp: 8;
1838 uint32_t max_num_su: 8;
1839 uint32_t pitch_width: 16;
1843 uint32_t src_size: 2;
1844 uint32_t reserved0: 2;
1845 uint32_t mb_type_remap: 2;
1846 uint32_t src_access: 1;
1847 uint32_t ref_access: 1;
1848 uint32_t search_ctrl: 3;
1849 uint32_t dual_search_path_option: 1;
1850 uint32_t sub_pel_mode: 2;
1851 uint32_t skip_type: 1;
1852 uint32_t disable_field_cache_allocation: 1;
1853 uint32_t inter_chroma_mode: 1;
1854 uint32_t ftq_enable: 1;
1855 uint32_t bme_disable_fbr: 1;
1856 uint32_t block_based_skip_enable: 1;
1857 uint32_t inter_sad: 2;
1858 uint32_t intra_sad: 2;
1859 uint32_t sub_mb_part_mask: 7;
1860 uint32_t reserved1: 1;
1864 uint32_t picture_height_minus1: 16;
1865 uint32_t mv_restriction_in_slice_enable: 1;
1866 uint32_t delta_mv_enable: 1;
1867 uint32_t true_distortion_enable: 1;
1868 uint32_t enable_wavefront_optimization: 1;
1869 uint32_t enable_fbr_bypass: 1;
1870 uint32_t enable_intra_cost_scaling_for_static_frame: 1;
1871 uint32_t reserved0: 1;
1872 uint32_t enable_widi_wa_surf: 1;
1873 uint32_t enable_widi_dirty_rect: 1;
1874 uint32_t enable_cur_fld_idr: 1;
1875 uint32_t contrained_intra_pred_flag: 1;
1876 uint32_t field_parity_flag: 1;
1877 uint32_t hme_enable: 1;
1878 uint32_t picture_type: 2;
1879 uint32_t use_actual_ref_qp_value: 1;
1883 uint32_t slice_mb_height: 16;
1884 uint32_t ref_width: 8;
1885 uint32_t ref_height: 8;
1889 uint32_t batch_buffer_end;
1893 uint32_t intra_part_mask: 5;
1894 uint32_t non_skip_zmv_added: 1;
1895 uint32_t non_skip_mode_added: 1;
1896 uint32_t luma_intra_src_corner_swap: 1;
1897 uint32_t reserved0: 8;
1898 uint32_t mv_cost_scale_factor: 2;
1899 uint32_t bilinear_enable: 1;
1900 uint32_t src_field_polarity: 1;
1901 uint32_t weightedsad_harr: 1;
1902 uint32_t ac_only_haar: 1;
1903 uint32_t ref_id_cost_mode: 1;
1904 uint32_t reserved1: 1;
1905 uint32_t skip_center_mask: 8;
1909 uint32_t mode_0_cost: 8;
1910 uint32_t mode_1_cost: 8;
1911 uint32_t mode_2_cost: 8;
1912 uint32_t mode_3_cost: 8;
1916 uint32_t mode_4_cost: 8;
1917 uint32_t mode_5_cost: 8;
1918 uint32_t mode_6_cost: 8;
1919 uint32_t mode_7_cost: 8;
1923 uint32_t mode_8_cost: 8;
1924 uint32_t mode_9_cost: 8;
1925 uint32_t ref_id_cost: 8;
1926 uint32_t chroma_intra_mode_cost: 8;
1931 uint32_t mv_0_cost: 8;
1932 uint32_t mv_1_cost: 8;
1933 uint32_t mv_2_cost: 8;
1934 uint32_t mv_3_cost: 8;
1940 uint32_t mv_4_cost: 8;
1941 uint32_t mv_5_cost: 8;
1942 uint32_t mv_6_cost: 8;
1943 uint32_t mv_7_cost: 8;
1947 uint32_t qp_prime_y: 8;
1948 uint32_t qp_prime_cb: 8;
1949 uint32_t qp_prime_cr: 8;
1950 uint32_t target_size_in_word: 8;
1954 uint32_t sic_fwd_transcoeff_threshold_0: 16;
1955 uint32_t sic_fwd_transcoeff_threshold_1: 8;
1956 uint32_t sic_fwd_transcoeff_threshold_2: 8;
1960 uint32_t sic_fwd_transcoeff_threshold_3: 8;
1961 uint32_t sic_fwd_transcoeff_threshold_4: 8;
1962 uint32_t sic_fwd_transcoeff_threshold_5: 8;
1963 uint32_t sic_fwd_transcoeff_threshold_6: 8;
1967 struct generic_search_path_delta sp_delta_0;
1968 struct generic_search_path_delta sp_delta_1;
1969 struct generic_search_path_delta sp_delta_2;
1970 struct generic_search_path_delta sp_delta_3;
1974 struct generic_search_path_delta sp_delta_4;
1975 struct generic_search_path_delta sp_delta_5;
1976 struct generic_search_path_delta sp_delta_6;
1977 struct generic_search_path_delta sp_delta_7;
1981 struct generic_search_path_delta sp_delta_8;
1982 struct generic_search_path_delta sp_delta_9;
1983 struct generic_search_path_delta sp_delta_10;
1984 struct generic_search_path_delta sp_delta_11;
1988 struct generic_search_path_delta sp_delta_12;
1989 struct generic_search_path_delta sp_delta_13;
1990 struct generic_search_path_delta sp_delta_14;
1991 struct generic_search_path_delta sp_delta_15;
1995 struct generic_search_path_delta sp_delta_16;
1996 struct generic_search_path_delta sp_delta_17;
1997 struct generic_search_path_delta sp_delta_18;
1998 struct generic_search_path_delta sp_delta_19;
2002 struct generic_search_path_delta sp_delta_20;
2003 struct generic_search_path_delta sp_delta_21;
2004 struct generic_search_path_delta sp_delta_22;
2005 struct generic_search_path_delta sp_delta_23;
2009 struct generic_search_path_delta sp_delta_24;
2010 struct generic_search_path_delta sp_delta_25;
2011 struct generic_search_path_delta sp_delta_26;
2012 struct generic_search_path_delta sp_delta_27;
2016 struct generic_search_path_delta sp_delta_28;
2017 struct generic_search_path_delta sp_delta_29;
2018 struct generic_search_path_delta sp_delta_30;
2019 struct generic_search_path_delta sp_delta_31;
2023 struct generic_search_path_delta sp_delta_32;
2024 struct generic_search_path_delta sp_delta_33;
2025 struct generic_search_path_delta sp_delta_34;
2026 struct generic_search_path_delta sp_delta_35;
2030 struct generic_search_path_delta sp_delta_36;
2031 struct generic_search_path_delta sp_delta_37;
2032 struct generic_search_path_delta sp_delta_38;
2033 struct generic_search_path_delta sp_delta_39;
2037 struct generic_search_path_delta sp_delta_40;
2038 struct generic_search_path_delta sp_delta_41;
2039 struct generic_search_path_delta sp_delta_42;
2040 struct generic_search_path_delta sp_delta_43;
2044 struct generic_search_path_delta sp_delta_44;
2045 struct generic_search_path_delta sp_delta_45;
2046 struct generic_search_path_delta sp_delta_46;
2047 struct generic_search_path_delta sp_delta_47;
2051 struct generic_search_path_delta sp_delta_48;
2052 struct generic_search_path_delta sp_delta_49;
2053 struct generic_search_path_delta sp_delta_50;
2054 struct generic_search_path_delta sp_delta_51;
2058 struct generic_search_path_delta sp_delta_52;
2059 struct generic_search_path_delta sp_delta_53;
2060 struct generic_search_path_delta sp_delta_54;
2061 struct generic_search_path_delta sp_delta_55;
2065 uint32_t intra_4x4_mode_mask: 9;
2066 uint32_t reserved0: 7;
2067 uint32_t intra_8x8_mode_mask: 9;
2068 uint32_t reserved1: 7;
2072 uint32_t intra_16x16_mode_mask: 4;
2073 uint32_t intra_chroma_mode_mask: 4;
2074 uint32_t intra_compute_type: 2;
2075 uint32_t reserved0: 22;
2079 uint32_t skip_val: 16;
2080 uint32_t mult_pred_l0_disable: 8;
2081 uint32_t mult_pred_l1_disable: 8;
2085 uint32_t intra_16x16_nondc_penalty: 8;
2086 uint32_t intra_8x8_nondc_penalty: 8;
2087 uint32_t intra_4x4_nondc_penalty: 8;
2088 uint32_t reserved0: 8;
2092 uint32_t list0_ref_id0_field_parity: 1;
2093 uint32_t list0_ref_id1_field_parity: 1;
2094 uint32_t list0_ref_id2_field_parity: 1;
2095 uint32_t list0_ref_id3_field_parity: 1;
2096 uint32_t list0_ref_id4_field_parity: 1;
2097 uint32_t list0_ref_id5_field_parity: 1;
2098 uint32_t list0_ref_id6_field_parity: 1;
2099 uint32_t list0_ref_id7_field_parity: 1;
2100 uint32_t list1_ref_id0_frm_field_parity: 1;
2101 uint32_t list1_ref_id1_frm_field_parity: 1;
2102 uint32_t widi_intra_refresh_en: 2;
2103 uint32_t arbitray_num_mbs_per_slice: 1;
2104 uint32_t enable_adaptive_tx_decision: 1;
2105 uint32_t force_non_skip_check: 1;
2106 uint32_t disable_enc_skip_check: 1;
2107 uint32_t enable_direct_bias_adjustment: 1;
2108 uint32_t b_force_to_skip: 1;
2109 uint32_t enable_global_motion_bias_adjustment: 1;
2110 uint32_t enable_adaptive_search_window_size: 1;
2111 uint32_t enable_per_mb_static_check: 1;
2112 uint32_t reserved0: 3;
2113 uint32_t list1_ref_id0_field_parity: 1;
2114 uint32_t list1_ref_id1_field_parity: 1;
2115 uint32_t mad_enable_falg: 1;
2116 uint32_t roi_enable_flag: 1;
2117 uint32_t enable_mb_flatness_check_optimization: 1;
2118 uint32_t b_direct_mode: 1;
2119 uint32_t mb_brc_enable: 1;
2120 uint32_t b_original_bff: 1;
2124 uint32_t panic_mode_mb_threshold: 16;
2125 uint32_t small_mb_size_in_word: 8;
2126 uint32_t large_mb_size_in_word: 8;
2130 uint32_t num_ref_idx_l0_minus_one: 8;
2131 uint32_t hme_combined_extra_sus: 8;
2132 uint32_t num_ref_idx_l1_minus_one: 8;
2133 uint32_t reserved0: 4;
2134 uint32_t is_fwd_frame_short_term_ref: 1;
2135 uint32_t check_all_fractional_enable: 1;
2136 uint32_t hme_combine_overlap: 2;
2140 uint32_t skip_mode_enable: 1;
2141 uint32_t adaptive_enable: 1;
2142 uint32_t bi_mix_dis: 1;
2143 uint32_t reserved0: 2;
2144 uint32_t early_ime_success_enable: 1;
2145 uint32_t reserved1: 1;
2146 uint32_t t8x8_flag_for_inter_enable: 1;
2147 uint32_t reserved2: 16;
2148 uint32_t early_ime_stop: 8;
2153 uint32_t max_len_sp: 8;
2154 uint32_t max_num_su: 8;
2155 uint32_t ref_threshold: 16;
2159 uint32_t reserved0: 8;
2160 uint32_t hme_ref_windows_comb_threshold: 8;
2161 uint32_t ref_width: 8;
2162 uint32_t ref_height: 8;
2166 uint32_t dist_scale_factor_ref_id0_list0: 16;
2167 uint32_t dist_scale_factor_ref_id1_list0: 16;
2171 uint32_t dist_scale_factor_ref_id2_list0: 16;
2172 uint32_t dist_scale_factor_ref_id3_list0: 16;
2176 uint32_t dist_scale_factor_ref_id4_list0: 16;
2177 uint32_t dist_scale_factor_ref_id5_list0: 16;
2181 uint32_t dist_scale_factor_ref_id6_list0: 16;
2182 uint32_t dist_scale_factor_ref_id7_list0: 16;
2186 uint32_t actual_qp_value_for_ref_id0_list0: 8;
2187 uint32_t actual_qp_value_for_ref_id1_list0: 8;
2188 uint32_t actual_qp_value_for_ref_id2_list0: 8;
2189 uint32_t actual_qp_value_for_ref_id3_list0: 8;
2193 uint32_t actual_qp_value_for_ref_id4_list0: 8;
2194 uint32_t actual_qp_value_for_ref_id5_list0: 8;
2195 uint32_t actual_qp_value_for_ref_id6_list0: 8;
2196 uint32_t actual_qp_value_for_ref_id7_list0: 8;
2200 uint32_t actual_qp_value_for_ref_id0_list1: 8;
2201 uint32_t actual_qp_value_for_ref_id1_list1: 8;
2202 uint32_t ref_cost: 16;
2206 uint32_t mb_qp_read_factor: 8;
2207 uint32_t intra_cost_sf: 8;
2208 uint32_t max_vmv_r: 16;
2212 uint32_t widi_intra_refresh_mb_num: 16;
2213 uint32_t widi_intra_refresh_unit_in_mb_minus1: 8;
2214 uint32_t widi_intra_refresh_qp_delta: 8;
2218 uint32_t roi_1_x_left: 16;
2219 uint32_t roi_1_y_top: 16;
2223 uint32_t roi_1_x_right: 16;
2224 uint32_t roi_1_y_bottom: 16;
2228 uint32_t roi_2_x_left: 16;
2229 uint32_t roi_2_y_top: 16;
2233 uint32_t roi_2_x_right: 16;
2234 uint32_t roi_2_y_bottom: 16;
2238 uint32_t roi_3_x_left: 16;
2239 uint32_t roi_3_y_top: 16;
2243 uint32_t roi_3_x_right: 16;
2244 uint32_t roi_3_y_bottom: 16;
2248 uint32_t roi_4_x_left: 16;
2249 uint32_t roi_4_y_top: 16;
2253 uint32_t roi_4_x_right: 16;
2254 uint32_t roi_4_y_bottom: 16;
2258 uint32_t roi_1_dqp_prime_y: 8;
2259 uint32_t roi_2_dqp_prime_y: 8;
2260 uint32_t roi_3_dqp_prime_y: 8;
2261 uint32_t roi_4_dqp_prime_y: 8;
2265 uint32_t mb_texture_threshold: 16;
2266 uint32_t tx_decision_threshold: 16;
2270 uint32_t hme_mv_cost_scaling_factor: 8;
2271 uint32_t reserved0: 24;
2291 uint32_t mb_data_surf_index;
2295 uint32_t mv_data_surf_index;
2299 uint32_t i_dist_surf_index;
2303 uint32_t src_y_surf_index;
2307 uint32_t mb_specific_data_surf_index;
2311 uint32_t aux_vme_out_surf_index;
2315 uint32_t curr_ref_pic_sel_surf_index;
2319 uint32_t hme_mv_pred_fwd_bwd_surf_index;
2323 uint32_t hme_dist_surf_index;
2327 uint32_t slice_map_surf_index;
2331 uint32_t fwd_frm_mb_data_surf_index;
2335 uint32_t fwd_frm_mv_surf_index;
2339 uint32_t mb_qp_buffer;
2343 uint32_t mb_brc_lut;
2347 uint32_t vme_inter_prediction_surf_index;
2351 uint32_t vme_inter_prediction_mr_surf_index;
2355 uint32_t mb_stats_surf_index;
2359 uint32_t mad_surf_index;
2363 uint32_t force_non_skip_mb_map_surface;
2367 uint32_t widi_wa_surf_index;
2371 uint32_t brc_curbe_surf_index;
2375 uint32_t static_detection_cost_table_index;
2386 } gen9_avc_mbenc_curbe_data;
2388 #define GEN9_AVC_KERNEL_MBENC_QUALITY_I 0
2389 #define GEN9_AVC_KERNEL_MBENC_QUALITY_P 1
2390 #define GEN9_AVC_KERNEL_MBENC_QUALITY_B 2
2391 #define GEN9_AVC_KERNEL_MBENC_NORMAL_I 3
2392 #define GEN9_AVC_KERNEL_MBENC_NORMAL_P 4
2393 #define GEN9_AVC_KERNEL_MBENC_NORMAL_B 5
2394 #define GEN9_AVC_KERNEL_MBENC_PERFORMANCE_I 6
2395 #define GEN9_AVC_KERNEL_MBENC_PERFORMANCE_P 7
2396 #define GEN9_AVC_KERNEL_MBENC_PERFORMANCE_B 8
2397 #define NUM_GEN9_AVC_KERNEL_MBENC 9
2399 /* structure holding AVC FEI mbenc Curbe data */
2400 typedef struct _gen9_avc_fei_mbenc_curbe_data {
2401 /* dw0: M1.0 defined in the VME message header/payload */
2403 uint32_t skip_mode_enable: 1;
2404 uint32_t adaptive_enable: 1;
2405 uint32_t bi_mix_diable: 1;
2406 uint32_t reserved0: 2;
2407 uint32_t early_ime_success_enable: 1;
2408 uint32_t reserved1: 1;
2409 uint32_t t8x8_flag_for_inter_enable: 1;
2410 uint32_t reserved2: 16;
2411 uint32_t early_ime_stop: 8;
2414 /* dw1: M1.1 defined in the VME message header/payload */
2416 uint32_t max_num_mvs: 6;
2417 uint32_t reserved0: 10;
2418 uint32_t bi_Weight: 6;
2419 uint32_t reserved1: 6;
2420 uint32_t uni_mix_disable: 1;
2421 uint32_t reserved2: 3;
2423 /* dw2: lower 16bits in M1.2 defined in the VME message header/payload */
2425 uint32_t max_len_sp: 8;
2426 uint32_t max_num_su: 8;
2427 uint32_t pic_width: 16;
2430 /* dw3: M0.3 defined in the VME message header/payload */
2432 uint32_t src_size: 2;
2433 uint32_t reserved0: 1;
2434 uint32_t reserved1: 1;
2435 uint32_t mb_type_remap: 2;
2436 uint32_t src_access: 1;
2437 uint32_t ref_access: 1;
2438 uint32_t search_ctrl: 3;
2439 uint32_t dual_search_path_option: 1;
2440 uint32_t sub_pel_mode: 2;
2441 uint32_t skip_type: 1;
2442 uint32_t disable_field_cache_allocation: 1;
2443 uint32_t inter_chroma_mode: 1;
2444 uint32_t ft_enable: 1;
2445 uint32_t bme_disable_fbr: 1;
2446 uint32_t block_based_skip_enable: 1;
2447 uint32_t inter_sad: 2;
2448 uint32_t Intra_sad: 2;
2449 uint32_t sub_mb_part_mask: 7;
2450 uint32_t reserved2: 1;
2455 uint32_t pic_height_minus1: 16;
2456 uint32_t mv_restriction_in_slice_enable: 1;
2457 uint32_t delta_mv_enable: 1;
2458 uint32_t true_distortion_enable: 1;
2459 uint32_t enable_wavefront_optimization: 1;
2460 uint32_t enable_fbr_bypass: 1;
2461 uint32_t enable_intra_cost_scaling_for_static_frame: 1;
2462 uint32_t reserved0: 1;
2463 uint32_t enable_widi_wa_s: 1;
2464 uint32_t enable_widi_dirty_rect: 1;
2465 uint32_t enable_cur_fld_idr: 1;
2466 uint32_t constrained_intra_pred_flag: 1;
2467 uint32_t field_parity_flag: 1;
2468 uint32_t hme_enable: 1;
2469 uint32_t picture_type: 2;
2470 uint32_t use_actual_ref_qp_value: 1;
2473 /* dw5: M0.5 defined in the VME message header/payload */
2475 uint32_t slice_mb_height: 16;
2476 uint32_t ref_width: 8;
2477 uint32_t ref_height: 8;
2482 uint32_t batch_buffer_end: 32;
2485 /* dw7: M1.7 defined in the VME message header/payload */
2487 uint32_t intra_part_mask: 5;
2488 uint32_t non_skip_zmv_added: 1;
2489 uint32_t non_skip_mode_added: 1;
2490 uint32_t luma_intra_src_corner_swap: 1;
2491 uint32_t reserved0: 8;
2492 uint32_t mv_cost_scale_factor: 2;
2493 uint32_t bilinear_enable: 1;
2494 uint32_t src_field_polarity: 1;
2495 uint32_t weightedsad_haar: 1;
2496 uint32_t ac_only_haar: 1;
2497 uint32_t ref_id_cost_mode: 1;
2498 uint32_t reserved1: 1;
2499 uint32_t skip_center_mask: 8;
2504 uint32_t mode_0_cost: 8;
2505 uint32_t mode_1_cost: 8;
2506 uint32_t mode_2_cost: 8;
2507 uint32_t mode_3_cost: 8;
2512 uint32_t mode_4_cost: 8;
2513 uint32_t mode_5_cost: 8;
2514 uint32_t mode_6_cost: 8;
2515 uint32_t mode_7_cost: 8;
2520 uint32_t mode_8_cost: 8;
2521 uint32_t mode_9_cost: 8;
2522 uint32_t ref_id_cost: 8;
2523 uint32_t chroma_intra_mode_cost: 8;
2529 uint32_t mv_0_cost: 8;
2530 uint32_t mv_1_cost: 8;
2531 uint32_t mv_2_cost: 8;
2532 uint32_t mv_3_cost: 8;
2539 uint32_t mv_4_cost: 8;
2540 uint32_t mv_5_cost: 8;
2541 uint32_t mv_6_cost: 8;
2542 uint32_t mv_7_cost: 8;
2547 uint32_t qp_prime_y: 8;
2548 uint32_t qp_prime_cb: 8;
2549 uint32_t qp_prime_cr: 8;
2550 uint32_t target_size_in_word: 8;
2554 uint32_t sic_fwd_transcoeff_threshold_0: 16;
2555 uint32_t sic_fwd_transcoeff_threshold_1: 8;
2556 uint32_t sic_fwd_transcoeff_threshold_2: 8;
2560 uint32_t sic_fwd_transcoeff_threshold_3: 8;
2561 uint32_t sic_fwd_transcoeff_threshold_4: 8;
2562 uint32_t sic_fwd_transcoeff_threshold_5: 8;
2563 uint32_t sic_fwd_transcoeff_threshold_6: 8;
2567 struct generic_search_path_delta sp_delta_0;
2568 struct generic_search_path_delta sp_delta_1;
2569 struct generic_search_path_delta sp_delta_2;
2570 struct generic_search_path_delta sp_delta_3;
2574 struct generic_search_path_delta sp_delta_4;
2575 struct generic_search_path_delta sp_delta_5;
2576 struct generic_search_path_delta sp_delta_6;
2577 struct generic_search_path_delta sp_delta_7;
2581 struct generic_search_path_delta sp_delta_8;
2582 struct generic_search_path_delta sp_delta_9;
2583 struct generic_search_path_delta sp_delta_10;
2584 struct generic_search_path_delta sp_delta_11;
2588 struct generic_search_path_delta sp_delta_12;
2589 struct generic_search_path_delta sp_delta_13;
2590 struct generic_search_path_delta sp_delta_14;
2591 struct generic_search_path_delta sp_delta_15;
2595 struct generic_search_path_delta sp_delta_16;
2596 struct generic_search_path_delta sp_delta_17;
2597 struct generic_search_path_delta sp_delta_18;
2598 struct generic_search_path_delta sp_delta_19;
2602 struct generic_search_path_delta sp_delta_20;
2603 struct generic_search_path_delta sp_delta_21;
2604 struct generic_search_path_delta sp_delta_22;
2605 struct generic_search_path_delta sp_delta_23;
2609 struct generic_search_path_delta sp_delta_24;
2610 struct generic_search_path_delta sp_delta_25;
2611 struct generic_search_path_delta sp_delta_26;
2612 struct generic_search_path_delta sp_delta_27;
2616 struct generic_search_path_delta sp_delta_28;
2617 struct generic_search_path_delta sp_delta_29;
2618 struct generic_search_path_delta sp_delta_30;
2619 struct generic_search_path_delta sp_delta_31;
2623 struct generic_search_path_delta sp_delta_32;
2624 struct generic_search_path_delta sp_delta_33;
2625 struct generic_search_path_delta sp_delta_34;
2626 struct generic_search_path_delta sp_delta_35;
2630 struct generic_search_path_delta sp_delta_36;
2631 struct generic_search_path_delta sp_delta_37;
2632 struct generic_search_path_delta sp_delta_38;
2633 struct generic_search_path_delta sp_delta_39;
2637 struct generic_search_path_delta sp_delta_40;
2638 struct generic_search_path_delta sp_delta_41;
2639 struct generic_search_path_delta sp_delta_42;
2640 struct generic_search_path_delta sp_delta_43;
2644 struct generic_search_path_delta sp_delta_44;
2645 struct generic_search_path_delta sp_delta_45;
2646 struct generic_search_path_delta sp_delta_46;
2647 struct generic_search_path_delta sp_delta_47;
2651 struct generic_search_path_delta sp_delta_48;
2652 struct generic_search_path_delta sp_delta_49;
2653 struct generic_search_path_delta sp_delta_50;
2654 struct generic_search_path_delta sp_delta_51;
2658 struct generic_search_path_delta sp_delta_52;
2659 struct generic_search_path_delta sp_delta_53;
2660 struct generic_search_path_delta sp_delta_54;
2661 struct generic_search_path_delta sp_delta_55;
2665 uint32_t intra_4x4_mode_mask: 9;
2666 uint32_t reserved0: 7;
2667 uint32_t intra_8x8_mode_mask: 9;
2668 uint32_t reserved1: 7;
2672 uint32_t intra_16x16_mode_mask: 4;
2673 uint32_t intra_chroma_mode_mask: 4;
2674 uint32_t intra_compute_type: 2;
2675 uint32_t reserved0: 22;
2679 uint32_t skip_val: 16;
2680 uint32_t mult_pred_l0_disable: 8;
2681 uint32_t mult_pred_l1_disable: 8;
2685 uint32_t intra_16x16_nondc_penalty: 8;
2686 uint32_t intra_8x8_nondc_penalty: 8;
2687 uint32_t intra_4x4_nondc_penalty: 8;
2688 uint32_t reserved0: 8;
2692 uint32_t list0_ref_id0_field_parity: 1;
2693 uint32_t list0_ref_id1_field_parity: 1;
2694 uint32_t list0_ref_id2_field_parity: 1;
2695 uint32_t list0_ref_id3_field_parity: 1;
2696 uint32_t list0_ref_id4_field_parity: 1;
2697 uint32_t list0_ref_id5_field_parity: 1;
2698 uint32_t list0_ref_id6_field_parity: 1;
2699 uint32_t list0_ref_id7_field_parity: 1;
2700 uint32_t list1_ref_id0_frm_field_parity: 1;
2701 uint32_t list1_ref_id1_frm_field_parity: 1;
2702 uint32_t widi_intra_refresh_en: 2;
2703 uint32_t arbitray_num_mbs_per_slice: 1;
2704 uint32_t enable_adaptive_tx_decision: 1;
2705 uint32_t force_non_skip_check: 1;
2706 uint32_t disable_enc_skip_check: 1;
2707 uint32_t enable_direct_bias_adjustment: 1;
2708 uint32_t b_force_to_skip: 1;
2709 uint32_t enable_global_motion_bias_adjustment: 1;
2710 uint32_t enable_adaptive_search_window_size: 1;
2711 uint32_t enable_per_mb_static_check: 1;
2712 uint32_t reserved0: 3;
2713 uint32_t list1_ref_id0_field_parity: 1;
2714 uint32_t list1_ref_id1_field_parity: 1;
2715 uint32_t mad_enable_falg: 1;
2716 uint32_t roi_enable_flag: 1;
2717 uint32_t enable_mb_flatness_check_optimization: 1;
2718 uint32_t b_direct_mode: 1;
2719 uint32_t mb_brc_enable: 1;
2720 uint32_t b_original_bff: 1;
2724 uint32_t panic_mode_mb_threshold: 16;
2725 uint32_t small_mb_size_in_word: 8;
2726 uint32_t large_mb_size_in_word: 8;
2730 uint32_t num_ref_idx_l0_minus_one: 8;
2731 uint32_t hme_combined_extra_sus: 8;
2732 uint32_t num_ref_idx_l1_minus_one: 8;
2733 uint32_t reserved0: 4;
2734 uint32_t is_fwd_frame_short_term_ref: 1;
2735 uint32_t check_all_fractional_enable: 1;
2736 uint32_t hme_combine_overlap: 2;
2740 uint32_t skip_mode_enable: 1;
2741 uint32_t adaptive_enable: 1;
2742 uint32_t bi_mix_dis: 1;
2743 uint32_t reserved0: 2;
2744 uint32_t early_ime_success_enable: 1;
2745 uint32_t reserved1: 1;
2746 uint32_t t8x8_flag_for_inter_enable: 1;
2747 uint32_t reserved2: 16;
2748 uint32_t early_ime_stop: 8;
2753 uint32_t max_len_sp: 8;
2754 uint32_t max_num_su: 8;
2755 uint32_t ref_threshold: 16;
2759 uint32_t reserved0: 8;
2760 uint32_t hme_ref_windows_comb_threshold: 8;
2761 uint32_t ref_width: 8;
2762 uint32_t ref_height: 8;
2766 uint32_t dist_scale_factor_ref_id0_list0: 16;
2767 uint32_t dist_scale_factor_ref_id1_list0: 16;
2771 uint32_t dist_scale_factor_ref_id2_list0: 16;
2772 uint32_t dist_scale_factor_ref_id3_list0: 16;
2776 uint32_t dist_scale_factor_ref_id4_list0: 16;
2777 uint32_t dist_scale_factor_ref_id5_list0: 16;
2781 uint32_t dist_scale_factor_ref_id6_list0: 16;
2782 uint32_t dist_scale_factor_ref_id7_list0: 16;
2786 uint32_t actual_qp_value_for_ref_id0_list0: 8;
2787 uint32_t actual_qp_value_for_ref_id1_list0: 8;
2788 uint32_t actual_qp_value_for_ref_id2_list0: 8;
2789 uint32_t actual_qp_value_for_ref_id3_list0: 8;
2793 uint32_t actual_qp_value_for_ref_id4_list0: 8;
2794 uint32_t actual_qp_value_for_ref_id5_list0: 8;
2795 uint32_t actual_qp_value_for_ref_id6_list0: 8;
2796 uint32_t actual_qp_value_for_ref_id7_list0: 8;
2800 uint32_t actual_qp_value_for_ref_id0_list1: 8;
2801 uint32_t actual_qp_value_for_ref_id1_list1: 8;
2802 uint32_t ref_cost: 16;
2806 uint32_t mb_qp_read_factor: 8;
2807 uint32_t intra_cost_sf: 8;
2808 uint32_t max_vmv_r: 16;
2812 uint32_t widi_intra_refresh_mb_num: 16;
2813 uint32_t widi_intra_refresh_unit_in_mb_minus1: 8;
2814 uint32_t widi_intra_refresh_qp_delta: 8;
2818 uint32_t roi_1_x_left: 16;
2819 uint32_t roi_1_y_top: 16;
2823 uint32_t roi_1_x_right: 16;
2824 uint32_t roi_1_y_bottom: 16;
2828 uint32_t roi_2_x_left: 16;
2829 uint32_t roi_2_y_top: 16;
2833 uint32_t roi_2_x_right: 16;
2834 uint32_t roi_2_y_bottom: 16;
2838 uint32_t roi_3_x_left: 16;
2839 uint32_t roi_3_y_top: 16;
2843 uint32_t roi_3_x_right: 16;
2844 uint32_t roi_3_y_bottom: 16;
2848 uint32_t roi_4_x_left: 16;
2849 uint32_t roi_4_y_top: 16;
2853 uint32_t roi_4_x_right: 16;
2854 uint32_t roi_4_y_bottom: 16;
2858 uint32_t roi_1_dqp_prime_y: 8;
2859 uint32_t roi_2_dqp_prime_y: 8;
2860 uint32_t roi_3_dqp_prime_y: 8;
2861 uint32_t roi_4_dqp_prime_y: 8;
2865 uint32_t mb_texture_threshold: 16;
2866 uint32_t tx_decision_threshold: 16;
2870 uint32_t hme_mv_cost_scaling_factor: 8;
2871 uint32_t reserved0: 24;
2892 uint32_t num_mv_predictors_l0: 4;
2893 uint32_t fei_enable: 1;
2894 uint32_t multiple_mv_predictor_per_mb_enable: 1;
2895 uint32_t vme_distortion_output_enable: 1;
2896 uint32_t per_mb_qp_enable: 1;
2897 uint32_t mb_input_enable: 1;
2898 uint32_t fei_mode: 1;
2899 uint32_t num_mv_predictors_l1: 4;
2900 uint32_t reserved: 18;
2905 uint32_t reserved: 32;
2910 uint32_t reserved: 32;
2915 uint32_t reserved: 32;
2920 uint32_t reserved: 32;
2925 uint32_t reserved: 32;
2930 uint32_t reserved: 32;
2935 uint32_t reserved: 32;
2940 uint32_t reserved: 32;
2945 uint32_t reserved: 32;
2950 uint32_t reserved: 32;
2955 uint32_t reserved: 32;
2960 uint32_t reserved: 32;
2965 uint32_t reserved: 32;
2970 uint32_t reserved: 32;
2975 uint32_t reserved: 32;
2980 uint32_t mb_data_surf_index: 32;
2985 uint32_t mv_data_surf_index: 32;
2990 uint32_t i_dist_surf_index: 32;
2995 uint32_t src_y_surf_index: 32;
3000 uint32_t mb_specific_data_surf_index: 32;
3005 uint32_t aux_vme_out_surf_index: 32;
3010 uint32_t curr_ref_pic_sel_surf_index: 32;
3015 uint32_t hme_mv_pred_fwd_bwd_surf_index: 32;
3020 uint32_t hme_dist_surf_index: 32;
3025 uint32_t slice_map_surf_index: 32;
3030 uint32_t fwd_frm_mb_data_surf_index: 32;
3035 uint32_t fwd_frm_mv_surf_index: 32;
3040 uint32_t mb_qp_buffer: 32;
3045 uint32_t mb_brc_lut: 32;
3050 uint32_t vme_inter_prediction_surf_index: 32;
3055 uint32_t vme_inter_prediction_mr_surf_index: 32;
3060 uint32_t mb_stats_surf_index: 32;
3065 uint32_t mad_surf_index: 32;
3070 uint32_t force_non_skip_mb_map_surface: 32;
3075 uint32_t widi_wa_surf_index: 32;
3080 uint32_t brc_curbe_surf_index: 32;
3085 uint32_t static_detection_cost_table_index: 32;
3090 uint32_t fei_mv_predictor_surf_index: 32;
3095 uint32_t reserved: 32;
3098 } gen9_avc_fei_mbenc_curbe_data;
3100 #define GEN9_AVC_FEI_KERNEL_I 0
3101 #define GEN9_AVC_FEI_KERNEL_P 1
3102 #define GEN9_AVC_FEI_KERNEL_B 2
3103 /* Number of MBENC kernels */
3104 #define NUM_GEN9_AVC_FEI_KERNEL_MBENC 3
3106 struct gen_avc_mbenc_context {
3107 struct i965_gpe_context gpe_contexts[NUM_GEN9_AVC_KERNEL_MBENC];
3111 static frame detection structure and define
3113 typedef enum _gen9_avc_binding_table_offset_sfd {
3114 GEN9_AVC_SFD_VDENC_INPUT_IMAGE_STATE_INDEX = 0,
3115 GEN9_AVC_SFD_MV_DATA_SURFACE_INDEX = 1,
3116 GEN9_AVC_SFD_INTER_DISTORTION_SURFACE_INDEX = 2,
3117 GEN9_AVC_SFD_OUTPUT_DATA_SURFACE_INDEX = 3,
3118 GEN9_AVC_SFD_VDENC_OUTPUT_IMAGE_STATE_INDEX = 4,
3119 GEN9_AVC_SFD_NUM_SURFACES = 5
3120 } gen9_avc_binding_table_offset_sfd;
3122 typedef struct _gen9_avc_sfd_curbe_data {
3124 uint32_t vdenc_mode_disable: 1;
3125 uint32_t brc_mode_enable: 1;
3126 uint32_t slice_type: 2;
3127 uint32_t reserved0: 1;
3128 uint32_t stream_in_type: 4;
3129 uint32_t enable_adaptive_mv_stream_in: 1;
3130 uint32_t reserved1: 1;
3131 uint32_t enable_intra_cost_scaling_for_static_frame: 1;
3132 uint32_t reserved2: 20;
3136 uint32_t qp_value: 8;
3137 uint32_t num_of_refs: 8;
3138 uint32_t hme_stream_in_ref_cost: 8;
3139 uint32_t reserved0: 8;
3143 uint32_t frame_width_in_mbs: 16;
3144 uint32_t frame_height_in_mbs: 16;
3148 uint32_t large_mv_threshold;
3152 uint32_t total_large_mv_threshold;
3156 uint32_t zmv_threshold;
3160 uint32_t total_zmv_threshold;
3164 uint32_t min_dist_threshold;
3167 char cost_table[52];
3169 uint32_t actual_width_in_mb: 16;
3170 uint32_t actual_height_in_mb: 16;
3182 uint32_t vdenc_input_image_state_index;
3190 uint32_t mv_data_surface_index;
3194 uint32_t inter_distortion_surface_index;
3198 uint32_t output_data_surface_index;
3202 uint32_t vdenc_output_image_state_index;
3205 } gen9_avc_sfd_curbe_data;
3207 struct gen_avc_sfd_context {
3208 struct i965_gpe_context gpe_contexts;
3211 struct gen_avc_preproc_context {
3212 struct i965_gpe_context gpe_contexts;
3215 /* preproc binding table */
3216 typedef enum _gen9_avc_binding_table_offset_preproc {
3217 GEN9_AVC_PREPROC_CURR_Y_INDEX = 0,
3218 GEN9_AVC_PREPROC_CURR_UV_INDEX = 1,
3219 GEN9_AVC_PREPROC_HME_MV_DATA_INDEX = 2,
3220 GEN9_AVC_PREPROC_MV_PREDICTOR_INDEX = 3,
3221 GEN9_AVC_PREPROC_MBQP_INDEX = 4,
3222 GEN9_AVC_PREPROC_MV_DATA_INDEX = 5,
3223 GEN9_AVC_PREPROC_MB_STATS_INDEX = 6,
3224 GEN9_AVC_PREPROC_VME_CURR_PIC_IDX_0_INDEX = 7,
3225 GEN9_AVC_PREPROC_VME_FWD_PIC_IDX0_INDEX = 8,
3226 GEN9_AVC_PREPROC_VME_BWD_PIC_IDX0_0_INDEX = 9,
3227 GEN9_AVC_PREPROC_VME_CURR_PIC_IDX_1_INDEX = 10,
3228 GEN9_AVC_PREPROC_VME_BWD_PIC_IDX0_1_INDEX = 11,
3229 GEN9_AVC_PREPROC_RESERVED1_INDEX = 12,
3230 GEN9_AVC_PREPROC_FTQ_LUT_INDEX = 13,
3231 GEN9_AVC_PREPROC_NUM_SURFACES_INDEX = 14
3232 } gen9_avc_binding_table_offset_preproc;
3234 /* preenc preproc curbe data */
3235 typedef struct _gen9_avc_preproc_curbe_data {
3237 uint32_t skip_mode_enable: 1;
3238 uint32_t adaptive_enable: 1;
3239 uint32_t bi_mix_dis: 1;
3240 uint32_t reserved0: 2;
3241 uint32_t early_ime_success_enable: 1;
3242 uint32_t reserved1: 1;
3243 uint32_t t8x8_flag_for_inter_enable: 1;
3244 uint32_t reserved2: 16;
3245 uint32_t early_ime_stop: 8;
3249 uint32_t max_num_mvs: 6;
3250 uint32_t reserved0: 10;
3251 uint32_t bi_weight: 6;
3252 uint32_t reserved1: 6;
3253 uint32_t uni_mix_disable: 1;
3254 uint32_t reserved2: 3;
3258 uint32_t max_len_sp: 8;
3259 uint32_t max_num_su: 8;
3260 uint32_t pic_width: 16;
3264 uint32_t src_size: 2;
3265 uint32_t reserved0: 2;
3266 uint32_t mb_type_remap: 2;
3267 uint32_t src_access: 1;
3268 uint32_t ref_access: 1;
3269 uint32_t search_ctrl: 3;
3270 uint32_t dual_search_path_option: 1;
3271 uint32_t sub_pel_mode: 2;
3272 uint32_t skip_type: 1;
3273 uint32_t disable_field_cache_allocation: 1;
3274 uint32_t inter_chroma_mode: 1;
3275 uint32_t ft_enable: 1;
3276 uint32_t bme_disable_fbr: 1;
3277 uint32_t block_based_skip_enable: 1;
3278 uint32_t inter_sad: 2;
3279 uint32_t intra_sad: 2;
3280 uint32_t sub_mb_part_mask: 7;
3281 uint32_t reserved1: 1;
3285 uint32_t frame_qp: 8;
3286 uint32_t per_mb_qp_enable: 1;
3287 uint32_t field_parity_flag: 1;
3288 uint32_t hme_enable : 1;
3289 uint32_t multiple_mv_predictor_per_mb_enable: 2;
3290 uint32_t disable_mv_output: 1;
3291 uint32_t disable_mb_stats: 1;
3292 uint32_t bwd_ref_pic_frame_field_flag: 1;
3293 uint32_t fwd_ref_pic_frame_field_flag: 1;
3294 uint32_t bwd_ref_pic_field_parity_flag: 1;
3295 uint32_t fwd_ref_pic_field_parity_flag: 1;
3296 uint32_t curr_pic_field_parity_flag: 1;
3297 uint32_t bwd_ref_pic_enable: 1;
3298 uint32_t fwd_ref_pic_enable: 1;
3299 uint32_t reserved: 10;
3303 uint32_t slice_mb_height: 16;
3304 uint32_t ref_width: 8;
3305 uint32_t ref_height: 8;
3309 uint32_t pic_height: 16;
3310 uint32_t reserved: 16;
3314 uint32_t intra_part_mask: 5;
3315 uint32_t non_skip_zmv_added: 1;
3316 uint32_t non_skip_mode_added: 1;
3317 uint32_t luma_intra_src_corner_swap: 1;
3318 uint32_t reserved0: 8;
3319 uint32_t mv_cost_scale_factor: 2;
3320 uint32_t bilinear_enable: 1;
3321 uint32_t src_field_polarity: 1;
3322 uint32_t weightedsad_harr: 1;
3323 uint32_t ac_only_haar: 1;
3324 uint32_t ref_id_cost_mode: 1;
3325 uint32_t reserved1: 1;
3326 uint32_t skip_center_mask: 8;
3330 uint32_t mode_0_cost: 8;
3331 uint32_t mode_1_cost: 8;
3332 uint32_t mode_2_cost: 8;
3333 uint32_t mode_3_cost: 8;
3337 uint32_t mode_4_cost: 8;
3338 uint32_t mode_5_cost: 8;
3339 uint32_t mode_6_cost: 8;
3340 uint32_t mode_7_cost: 8;
3343 uint32_t mode_8_cost: 8;
3344 uint32_t mode_9_cost: 8;
3345 uint32_t ref_id_cost: 8;
3346 uint32_t chroma_intra_mode_cost: 8;
3350 uint32_t mv_0_cost: 8;
3351 uint32_t mv_1_cost: 8;
3352 uint32_t mv_2_cost: 8;
3353 uint32_t mv_3_cost: 8;
3356 uint32_t mv_4_cost: 8;
3357 uint32_t mv_5_cost: 8;
3358 uint32_t mv_6_cost: 8;
3359 uint32_t mv_7_cost: 8;
3367 uint32_t sic_fwd_trans_coeff_threshold_0: 16;
3368 uint32_t sic_fwd_trans_coeff_threshold_1: 8;
3369 uint32_t sic_fwd_trans_coeff_threshold_2: 8;
3373 uint32_t sic_fwd_trans_coeff_threshold_3: 8;
3374 uint32_t sic_fwd_trans_coeff_threshold_4: 8;
3375 uint32_t sic_fwd_trans_coeff_threshold_5: 8;
3376 uint32_t sic_fwd_trans_coeff_threshold_6: 8;
3380 struct generic_search_path_delta sp_delta_0;
3381 struct generic_search_path_delta sp_delta_1;
3382 struct generic_search_path_delta sp_delta_2;
3383 struct generic_search_path_delta sp_delta_3;
3387 struct generic_search_path_delta sp_delta_4;
3388 struct generic_search_path_delta sp_delta_5;
3389 struct generic_search_path_delta sp_delta_6;
3390 struct generic_search_path_delta sp_delta_7;
3394 struct generic_search_path_delta sp_delta_8;
3395 struct generic_search_path_delta sp_delta_9;
3396 struct generic_search_path_delta sp_delta_10;
3397 struct generic_search_path_delta sp_delta_11;
3400 struct generic_search_path_delta sp_delta_12;
3401 struct generic_search_path_delta sp_delta_13;
3402 struct generic_search_path_delta sp_delta_14;
3403 struct generic_search_path_delta sp_delta_15;
3407 struct generic_search_path_delta sp_delta_16;
3408 struct generic_search_path_delta sp_delta_17;
3409 struct generic_search_path_delta sp_delta_18;
3410 struct generic_search_path_delta sp_delta_19;
3414 struct generic_search_path_delta sp_delta_20;
3415 struct generic_search_path_delta sp_delta_21;
3416 struct generic_search_path_delta sp_delta_22;
3417 struct generic_search_path_delta sp_delta_23;
3422 struct generic_search_path_delta sp_delta_24;
3423 struct generic_search_path_delta sp_delta_25;
3424 struct generic_search_path_delta sp_delta_26;
3425 struct generic_search_path_delta sp_delta_27;
3429 struct generic_search_path_delta sp_delta_28;
3430 struct generic_search_path_delta sp_delta_29;
3431 struct generic_search_path_delta sp_delta_30;
3432 struct generic_search_path_delta sp_delta_31;
3436 struct generic_search_path_delta sp_delta_32;
3437 struct generic_search_path_delta sp_delta_33;
3438 struct generic_search_path_delta sp_delta_34;
3439 struct generic_search_path_delta sp_delta_35;
3443 struct generic_search_path_delta sp_delta_36;
3444 struct generic_search_path_delta sp_delta_37;
3445 struct generic_search_path_delta sp_delta_38;
3446 struct generic_search_path_delta sp_delta_39;
3451 struct generic_search_path_delta sp_delta_40;
3452 struct generic_search_path_delta sp_delta_41;
3453 struct generic_search_path_delta sp_delta_42;
3454 struct generic_search_path_delta sp_delta_43;
3458 struct generic_search_path_delta sp_delta_44;
3459 struct generic_search_path_delta sp_delta_45;
3460 struct generic_search_path_delta sp_delta_46;
3461 struct generic_search_path_delta sp_delta_47;
3466 struct generic_search_path_delta sp_delta_48;
3467 struct generic_search_path_delta sp_delta_49;
3468 struct generic_search_path_delta sp_delta_50;
3469 struct generic_search_path_delta sp_delta_51;
3473 struct generic_search_path_delta sp_delta_52;
3474 struct generic_search_path_delta sp_delta_53;
3475 struct generic_search_path_delta sp_delta_54;
3476 struct generic_search_path_delta sp_delta_55;
3480 uint32_t intra_4x4_mode_mask: 8;
3481 uint32_t reserved1: 8;
3482 uint32_t intra_8x8_mode_mask: 8;
3483 uint32_t reserved2: 8;
3487 uint32_t intra_16x16_mode_mask: 4;
3488 uint32_t intra_chroma_mode_mask: 4;
3489 uint32_t intra_compute_type: 2;
3490 uint32_t reserved: 22;
3494 uint32_t max_vmv_r: 16;
3495 uint32_t reserved: 16;
3499 uint32_t intra_16x16_non_dc_predPenalty: 8;
3500 uint32_t intra_8x8_non_dc_pred_penalty: 8;
3501 uint32_t intra_4x4_non_dc_pred_penalty: 8;
3502 uint32_t reserved : 8;
3514 uint32_t reserved1: 8;
3515 uint32_t hme_combined_extra_sus: 8;
3516 uint32_t reserved2: 14;
3517 uint32_t hme_combine_overlap: 2;
3521 uint32_t skip_mode_enable: 1;
3522 uint32_t adaptive_enable: 1;
3523 uint32_t bi_mix_disable: 1;
3524 uint32_t reserved1: 2;
3525 uint32_t early_ime_success_enable: 1;
3526 uint32_t reserved2: 1;
3527 uint32_t t8x8_flag_for_inter_enable: 1;
3528 uint32_t reserved3: 16;
3529 uint32_t early_ime_stop: 8;
3533 uint32_t max_len_sp: 8;
3534 uint32_t max_num_su: 8;
3535 uint32_t ref_threshold: 16;
3539 uint32_t reserved: 8;
3540 uint32_t hme_ref_windows_comb_threshold: 8;
3541 uint32_t ref_width: 8;
3542 uint32_t ref_height: 8;
3547 uint32_t curr_pic_surf_index;
3551 uint32_t hme_mv_dat_surf_index;
3555 uint32_t mv_predictor_surf_index;
3559 uint32_t mb_qp_surf_index;
3563 uint32_t mv_data_out_surf_index;
3567 uint32_t mb_stats_out_surf_index;
3571 uint32_t vme_inter_prediction_surf_index;
3575 uint32_t vme_Inter_prediction_mr_surf_index;
3579 uint32_t ftq_lut_surf_index;
3582 } gen9_avc_preproc_curbe_data;
3586 typedef struct _gen95_avc_scaling4x_curbe_data {
3588 uint32_t input_picture_width : 16;
3589 uint32_t input_picture_height : 16;
3593 uint32_t input_y_bti_frame;
3597 uint32_t output_y_bti_frame;
3609 uint32_t flatness_threshold;
3613 uint32_t enable_mb_flatness_check: 1;
3614 uint32_t enable_mb_variance_output: 1;
3615 uint32_t enable_mb_pixel_average_output: 1;
3616 uint32_t enable_block8x8_statistics_output: 1;
3617 uint32_t reserved0: 28;
3625 uint32_t mbv_proc_stat_bti_frame;
3655 } gen95_avc_scaling4x_curbe_data;
3657 typedef enum _gen95_avc_binding_table_offset_frame_brc_update {
3658 GEN95_AVC_FRAME_BRC_UPDATE_HISTORY_INDEX = 0,
3659 GEN95_AVC_FRAME_BRC_UPDATE_PAK_STATISTICS_OUTPUT_INDEX = 1,
3660 GEN95_AVC_FRAME_BRC_UPDATE_IMAGE_STATE_READ_INDEX = 2,
3661 GEN95_AVC_FRAME_BRC_UPDATE_IMAGE_STATE_WRITE_INDEX = 3,
3662 GEN95_AVC_FRAME_BRC_UPDATE_MBENC_CURBE_WRITE_INDEX = 4,
3663 GEN95_AVC_FRAME_BRC_UPDATE_DISTORTION_INDEX = 5,
3664 GEN95_AVC_FRAME_BRC_UPDATE_CONSTANT_DATA_INDEX = 6,
3665 GEN95_AVC_FRAME_BRC_UPDATE_MB_STATUS_INDEX = 7,
3666 GEN95_AVC_FRAME_BRC_UPDATE_NUM_SURFACES_INDEX = 8
3667 } gen95_avc_binding_table_offset_frame_brc_update;
3669 typedef enum _gen95_avc_binding_table_offset_mbenc {
3670 GEN95_AVC_MBENC_BRC_CURBE_DATA_INDEX = 39,
3671 GEN95_AVC_MBENC_FORCE_NONSKIP_MB_MAP_INDEX = 40,
3672 GEN95_AVC_MBENC_WIDI_WA_INDEX = 41,
3673 GEN95_AVC_MBENC_SFD_COST_TABLE_INDEX = 42,
3674 GEN95_AVC_MBENC_NUM_SURFACES_INDEX = 43
3675 } gen95_avc_binding_table_offset_mbenc;
3677 typedef struct _gen95_avc_mbenc_curbe_data {
3679 uint32_t skip_mode_enable: 1;
3680 uint32_t adaptive_enable: 1;
3681 uint32_t bi_mix_dis: 1;
3682 uint32_t reserved0: 2;
3683 uint32_t early_ime_success_enable: 1;
3684 uint32_t reserved1: 1;
3685 uint32_t t8x8_flag_for_inter_enable: 1;
3686 uint32_t reserved2: 16;
3687 uint32_t early_ime_stop: 8;
3691 uint32_t max_num_mvs: 6;
3692 uint32_t extended_mv_cost_range: 1;
3693 uint32_t reserved0: 9;
3694 uint32_t bi_weight: 6;
3695 uint32_t reserved1: 6;
3696 uint32_t uni_mix_disable: 1;
3697 uint32_t reserved2: 3;
3701 uint32_t max_len_sp: 8;
3702 uint32_t max_num_su: 8;
3703 uint32_t pitch_width: 16;
3707 uint32_t src_size: 2;
3708 uint32_t reserved0: 2;
3709 uint32_t mb_type_remap: 2;
3710 uint32_t src_access: 1;
3711 uint32_t ref_access: 1;
3712 uint32_t search_ctrl: 3;
3713 uint32_t dual_search_path_option: 1;
3714 uint32_t sub_pel_mode: 2;
3715 uint32_t skip_type: 1;
3716 uint32_t disable_field_cache_allocation: 1;
3717 uint32_t inter_chroma_mode: 1;
3718 uint32_t ftq_enable: 1;
3719 uint32_t bme_disable_fbr: 1;
3720 uint32_t block_based_skip_enable: 1;
3721 uint32_t inter_sad: 2;
3722 uint32_t intra_sad: 2;
3723 uint32_t sub_mb_part_mask: 7;
3724 uint32_t reserved1: 1;
3728 uint32_t picture_height_minus1: 16;
3729 uint32_t mv_restriction_in_slice_enable: 1;
3730 uint32_t delta_mv_enable: 1;
3731 uint32_t true_distortion_enable: 1;
3732 uint32_t enable_wavefront_optimization: 1;
3733 uint32_t enable_fbr_bypass: 1;
3734 uint32_t enable_intra_cost_scaling_for_static_frame: 1;
3735 uint32_t enable_intra_refresh: 1;
3736 uint32_t enable_widi_wa_surf: 1;
3737 uint32_t enable_widi_dirty_rect: 1;
3738 uint32_t enable_cur_fld_idr: 1;
3739 uint32_t contrained_intra_pred_flag: 1;
3740 uint32_t field_parity_flag: 1;
3741 uint32_t hme_enable: 1;
3742 uint32_t picture_type: 2;
3743 uint32_t use_actual_ref_qp_value: 1;
3747 uint32_t slice_mb_height: 16;
3748 uint32_t ref_width: 8;
3749 uint32_t ref_height: 8;
3753 uint32_t batch_buffer_end;
3757 uint32_t intra_part_mask: 5;
3758 uint32_t non_skip_zmv_added: 1;
3759 uint32_t non_skip_mode_added: 1;
3760 uint32_t luma_intra_src_corner_swap: 1;
3761 uint32_t reserved0: 8;
3762 uint32_t mv_cost_scale_factor: 2;
3763 uint32_t bilinear_enable: 1;
3764 uint32_t src_field_polarity: 1;
3765 uint32_t weightedsad_harr: 1;
3766 uint32_t ac_only_haar: 1;
3767 uint32_t ref_id_cost_mode: 1;
3768 uint32_t reserved1: 1;
3769 uint32_t skip_center_mask: 8;
3773 uint32_t mode_0_cost: 8;
3774 uint32_t mode_1_cost: 8;
3775 uint32_t mode_2_cost: 8;
3776 uint32_t mode_3_cost: 8;
3780 uint32_t mode_4_cost: 8;
3781 uint32_t mode_5_cost: 8;
3782 uint32_t mode_6_cost: 8;
3783 uint32_t mode_7_cost: 8;
3787 uint32_t mode_8_cost: 8;
3788 uint32_t mode_9_cost: 8;
3789 uint32_t ref_id_cost: 8;
3790 uint32_t chroma_intra_mode_cost: 8;
3795 uint32_t mv_0_cost: 8;
3796 uint32_t mv_1_cost: 8;
3797 uint32_t mv_2_cost: 8;
3798 uint32_t mv_3_cost: 8;
3804 uint32_t mv_4_cost: 8;
3805 uint32_t mv_5_cost: 8;
3806 uint32_t mv_6_cost: 8;
3807 uint32_t mv_7_cost: 8;
3811 uint32_t qp_prime_y: 8;
3812 uint32_t qp_prime_cb: 8;
3813 uint32_t qp_prime_cr: 8;
3814 uint32_t target_size_in_word: 8;
3818 uint32_t sic_fwd_transcoeff_threshold_0: 16;
3819 uint32_t sic_fwd_transcoeff_threshold_1: 8;
3820 uint32_t sic_fwd_transcoeff_threshold_2: 8;
3824 uint32_t sic_fwd_transcoeff_threshold_3: 8;
3825 uint32_t sic_fwd_transcoeff_threshold_4: 8;
3826 uint32_t sic_fwd_transcoeff_threshold_5: 8;
3827 uint32_t sic_fwd_transcoeff_threshold_6: 8;
3831 struct generic_search_path_delta sp_delta_0;
3832 struct generic_search_path_delta sp_delta_1;
3833 struct generic_search_path_delta sp_delta_2;
3834 struct generic_search_path_delta sp_delta_3;
3838 struct generic_search_path_delta sp_delta_4;
3839 struct generic_search_path_delta sp_delta_5;
3840 struct generic_search_path_delta sp_delta_6;
3841 struct generic_search_path_delta sp_delta_7;
3845 struct generic_search_path_delta sp_delta_8;
3846 struct generic_search_path_delta sp_delta_9;
3847 struct generic_search_path_delta sp_delta_10;
3848 struct generic_search_path_delta sp_delta_11;
3852 struct generic_search_path_delta sp_delta_12;
3853 struct generic_search_path_delta sp_delta_13;
3854 struct generic_search_path_delta sp_delta_14;
3855 struct generic_search_path_delta sp_delta_15;
3859 struct generic_search_path_delta sp_delta_16;
3860 struct generic_search_path_delta sp_delta_17;
3861 struct generic_search_path_delta sp_delta_18;
3862 struct generic_search_path_delta sp_delta_19;
3866 struct generic_search_path_delta sp_delta_20;
3867 struct generic_search_path_delta sp_delta_21;
3868 struct generic_search_path_delta sp_delta_22;
3869 struct generic_search_path_delta sp_delta_23;
3873 struct generic_search_path_delta sp_delta_24;
3874 struct generic_search_path_delta sp_delta_25;
3875 struct generic_search_path_delta sp_delta_26;
3876 struct generic_search_path_delta sp_delta_27;
3880 struct generic_search_path_delta sp_delta_28;
3881 struct generic_search_path_delta sp_delta_29;
3882 struct generic_search_path_delta sp_delta_30;
3883 struct generic_search_path_delta sp_delta_31;
3887 struct generic_search_path_delta sp_delta_32;
3888 struct generic_search_path_delta sp_delta_33;
3889 struct generic_search_path_delta sp_delta_34;
3890 struct generic_search_path_delta sp_delta_35;
3894 struct generic_search_path_delta sp_delta_36;
3895 struct generic_search_path_delta sp_delta_37;
3896 struct generic_search_path_delta sp_delta_38;
3897 struct generic_search_path_delta sp_delta_39;
3901 struct generic_search_path_delta sp_delta_40;
3902 struct generic_search_path_delta sp_delta_41;
3903 struct generic_search_path_delta sp_delta_42;
3904 struct generic_search_path_delta sp_delta_43;
3908 struct generic_search_path_delta sp_delta_44;
3909 struct generic_search_path_delta sp_delta_45;
3910 struct generic_search_path_delta sp_delta_46;
3911 struct generic_search_path_delta sp_delta_47;
3915 struct generic_search_path_delta sp_delta_48;
3916 struct generic_search_path_delta sp_delta_49;
3917 struct generic_search_path_delta sp_delta_50;
3918 struct generic_search_path_delta sp_delta_51;
3922 struct generic_search_path_delta sp_delta_52;
3923 struct generic_search_path_delta sp_delta_53;
3924 struct generic_search_path_delta sp_delta_54;
3925 struct generic_search_path_delta sp_delta_55;
3929 uint32_t intra_4x4_mode_mask: 9;
3930 uint32_t reserved0: 7;
3931 uint32_t intra_8x8_mode_mask: 9;
3932 uint32_t reserved1: 7;
3936 uint32_t intra_16x16_mode_mask: 4;
3937 uint32_t intra_chroma_mode_mask: 4;
3938 uint32_t intra_compute_type: 2;
3939 uint32_t reserved0: 22;
3943 uint32_t skip_val: 16;
3944 uint32_t mult_pred_l0_disable: 8;
3945 uint32_t mult_pred_l1_disable: 8;
3949 uint32_t intra_16x16_nondc_penalty: 8;
3950 uint32_t intra_8x8_nondc_penalty: 8;
3951 uint32_t intra_4x4_nondc_penalty: 8;
3952 uint32_t reserved0: 8;
3956 uint32_t list0_ref_id0_field_parity: 1;
3957 uint32_t list0_ref_id1_field_parity: 1;
3958 uint32_t list0_ref_id2_field_parity: 1;
3959 uint32_t list0_ref_id3_field_parity: 1;
3960 uint32_t list0_ref_id4_field_parity: 1;
3961 uint32_t list0_ref_id5_field_parity: 1;
3962 uint32_t list0_ref_id6_field_parity: 1;
3963 uint32_t list0_ref_id7_field_parity: 1;
3964 uint32_t list1_ref_id0_frm_field_parity: 1;
3965 uint32_t list1_ref_id1_frm_field_parity: 1;
3966 uint32_t widi_intra_refresh_en: 2;
3967 uint32_t arbitray_num_mbs_per_slice: 1;
3968 uint32_t tq_enable: 1;
3969 uint32_t force_non_skip_check: 1;
3970 uint32_t disable_enc_skip_check: 1;
3971 uint32_t enable_direct_bias_adjustment: 1;
3972 uint32_t b_force_to_skip: 1;
3973 uint32_t enable_global_motion_bias_adjustment: 1;
3974 uint32_t enable_adaptive_tx_decision: 1;
3975 uint32_t enable_per_mb_static_check: 1;
3976 uint32_t enable_adaptive_search_window_size: 1;
3977 uint32_t reserved0: 1;
3978 uint32_t cqp_flag: 1;
3979 uint32_t list1_ref_id0_field_parity: 1;
3980 uint32_t list1_ref_id1_field_parity: 1;
3981 uint32_t mad_enable_falg: 1;
3982 uint32_t roi_enable_flag: 1;
3983 uint32_t enable_mb_flatness_check_optimization: 1;
3984 uint32_t b_direct_mode: 1;
3985 uint32_t mb_brc_enable: 1;
3986 uint32_t b_original_bff: 1;
3990 uint32_t panic_mode_mb_threshold: 16;
3991 uint32_t small_mb_size_in_word: 8;
3992 uint32_t large_mb_size_in_word: 8;
3996 uint32_t num_ref_idx_l0_minus_one: 8;
3997 uint32_t hme_combined_extra_sus: 8;
3998 uint32_t num_ref_idx_l1_minus_one: 8;
3999 uint32_t reserved0: 4;
4000 uint32_t is_fwd_frame_short_term_ref: 1;
4001 uint32_t check_all_fractional_enable: 1;
4002 uint32_t hme_combine_overlap: 2;
4006 uint32_t skip_mode_enable: 1;
4007 uint32_t adaptive_enable: 1;
4008 uint32_t bi_mix_dis: 1;
4009 uint32_t reserved0: 2;
4010 uint32_t early_ime_success_enable: 1;
4011 uint32_t reserved1: 1;
4012 uint32_t t8x8_flag_for_inter_enable: 1;
4013 uint32_t reserved2: 16;
4014 uint32_t early_ime_stop: 8;
4019 uint32_t max_len_sp: 8;
4020 uint32_t max_num_su: 8;
4021 uint32_t ref_threshold: 16;
4025 uint32_t reserved0: 8;
4026 uint32_t hme_ref_windows_comb_threshold: 8;
4027 uint32_t ref_width: 8;
4028 uint32_t ref_height: 8;
4032 uint32_t dist_scale_factor_ref_id0_list0: 16;
4033 uint32_t dist_scale_factor_ref_id1_list0: 16;
4037 uint32_t dist_scale_factor_ref_id2_list0: 16;
4038 uint32_t dist_scale_factor_ref_id3_list0: 16;
4042 uint32_t dist_scale_factor_ref_id4_list0: 16;
4043 uint32_t dist_scale_factor_ref_id5_list0: 16;
4047 uint32_t dist_scale_factor_ref_id6_list0: 16;
4048 uint32_t dist_scale_factor_ref_id7_list0: 16;
4052 uint32_t actual_qp_value_for_ref_id0_list0: 8;
4053 uint32_t actual_qp_value_for_ref_id1_list0: 8;
4054 uint32_t actual_qp_value_for_ref_id2_list0: 8;
4055 uint32_t actual_qp_value_for_ref_id3_list0: 8;
4059 uint32_t actual_qp_value_for_ref_id4_list0: 8;
4060 uint32_t actual_qp_value_for_ref_id5_list0: 8;
4061 uint32_t actual_qp_value_for_ref_id6_list0: 8;
4062 uint32_t actual_qp_value_for_ref_id7_list0: 8;
4066 uint32_t actual_qp_value_for_ref_id0_list1: 8;
4067 uint32_t actual_qp_value_for_ref_id1_list1: 8;
4068 uint32_t ref_cost: 16;
4072 uint32_t mb_qp_read_factor: 8;
4073 uint32_t intra_cost_sf: 8;
4074 uint32_t max_vmv_r: 16;
4078 uint32_t widi_intra_refresh_mb_x: 16;
4079 uint32_t widi_intra_refresh_unit_in_mb_minus1: 8;
4080 uint32_t widi_intra_refresh_qp_delta: 8;
4084 uint32_t roi_1_x_left: 16;
4085 uint32_t roi_1_y_top: 16;
4089 uint32_t roi_1_x_right: 16;
4090 uint32_t roi_1_y_bottom: 16;
4094 uint32_t roi_2_x_left: 16;
4095 uint32_t roi_2_y_top: 16;
4099 uint32_t roi_2_x_right: 16;
4100 uint32_t roi_2_y_bottom: 16;
4104 uint32_t roi_3_x_left: 16;
4105 uint32_t roi_3_y_top: 16;
4109 uint32_t roi_3_x_right: 16;
4110 uint32_t roi_3_y_bottom: 16;
4114 uint32_t roi_4_x_left: 16;
4115 uint32_t roi_4_y_top: 16;
4119 uint32_t roi_4_x_right: 16;
4120 uint32_t roi_4_y_bottom: 16;
4124 uint32_t roi_1_dqp_prime_y: 8;
4125 uint32_t roi_2_dqp_prime_y: 8;
4126 uint32_t roi_3_dqp_prime_y: 8;
4127 uint32_t roi_4_dqp_prime_y: 8;
4132 uint32_t lambda_8x8_inter: 16;
4133 uint32_t lambda_8x8_intra: 16;
4140 uint32_t lambda_inter: 16;
4141 uint32_t lambda_intra: 16;
4147 uint32_t mb_texture_threshold: 16;
4148 uint32_t tx_decision_threshold: 16;
4152 uint32_t hme_mv_cost_scaling_factor: 8;
4153 uint32_t reserved0: 8;
4154 uint32_t widi_intra_refresh_mb_y: 16;
4174 uint32_t mb_data_surf_index;
4178 uint32_t mv_data_surf_index;
4182 uint32_t i_dist_surf_index;
4186 uint32_t src_y_surf_index;
4190 uint32_t mb_specific_data_surf_index;
4194 uint32_t aux_vme_out_surf_index;
4198 uint32_t curr_ref_pic_sel_surf_index;
4202 uint32_t hme_mv_pred_fwd_bwd_surf_index;
4206 uint32_t hme_dist_surf_index;
4210 uint32_t slice_map_surf_index;
4214 uint32_t fwd_frm_mb_data_surf_index;
4218 uint32_t fwd_frm_mv_surf_index;
4222 uint32_t mb_qp_buffer;
4226 uint32_t mb_brc_lut;
4230 uint32_t vme_inter_prediction_surf_index;
4234 uint32_t vme_inter_prediction_mr_surf_index;
4238 uint32_t mb_stats_surf_index;
4242 uint32_t mad_surf_index;
4246 uint32_t brc_curbe_surf_index;
4250 uint32_t force_non_skip_mb_map_surface;
4254 uint32_t widi_wa_surf_index;
4258 uint32_t static_detection_cost_table_index;
4261 } gen95_avc_mbenc_curbe_data;
4263 typedef struct _gen8_avc_encoder_kernel_header {
4266 // Quality mode for Frame/Field
4267 kernel_header mbenc_quality_I;
4268 kernel_header mbenc_quality_P;
4269 kernel_header mbenc_quality_B;
4270 // Normal mode for Frame/Field
4271 kernel_header mbenc_normal_I;
4272 kernel_header mbenc_normal_P;
4273 kernel_header mbenc_normal_B;
4274 // Performance modes for Frame/Field
4275 kernel_header mbenc_performance_I;
4276 kernel_header mbenc_performance_P;
4277 kernel_header mbenc_performance_B;
4278 // WiDi modes for Frame/Field
4279 kernel_header mbenc_widi_I;
4280 kernel_header mbenc_widi_P;
4281 kernel_header mbenc_widi_B;
4288 kernel_header ply_dscale_ply;
4289 kernel_header ply_dscale_2f_ply_2f;
4291 kernel_header frame_brc_init;
4294 kernel_header frame_brc_update;
4297 kernel_header frame_brc_reset;
4299 // BRC I Frame Distortion
4300 kernel_header frame_brc_i_dist;
4303 kernel_header brc_block_copy;
4306 kernel_header ply_2xdscale_ply;
4307 kernel_header ply_2xdscale_2f_ply_2f;
4309 // Static frame detection Kernel
4310 kernel_header static_detection;
4311 } gen8_avc_encoder_kernel_header;
4313 struct gen8_mfx_avc_img_state {
4316 uint32_t dword_length: 16;
4317 uint32_t command_sub_opcode_b: 5;
4318 uint32_t command_sub_opcode_a: 3;
4319 uint32_t command_opcode: 3;
4320 uint32_t command_pipeline: 2;
4321 uint32_t command_type: 3;
4328 uint32_t frame_size_in_mbs: 16; //minus1
4333 uint32_t frame_width_in_mbs_minus1: 8; //minus1
4335 uint32_t frame_height_in_mbs_minus1: 8; //minus1
4341 uint32_t image_structure: 2;
4342 uint32_t weighted_bipred_idc: 2;
4343 uint32_t weighted_pred_flag: 1;
4344 uint32_t inter_mb_conf_flag: 1;
4345 uint32_t intra_mb_conf_flag: 1;
4347 uint32_t chroma_qp_offset: 5;
4349 uint32_t second_chroma_qp_offset: 5;
4354 uint32_t field_picture_flag: 1;
4355 uint32_t mbaff_mode_active: 1;
4356 uint32_t frame_mb_only_flag: 1;
4357 uint32_t transform_8x8_idct_mode_flag: 1;
4358 uint32_t direct_8x8_interface_flag: 1;
4359 uint32_t constrained_intra_prediction_flag: 1;
4360 uint32_t current_img_dispoable_flag: 1;
4361 uint32_t entropy_coding_flag: 1;
4362 uint32_t mb_mv_format_flag: 1;
4364 uint32_t chroma_format_idc: 2;
4365 uint32_t mv_unpacked_flag: 1;
4366 uint32_t insert_test_flag: 1;
4367 uint32_t load_slice_pointer_flag: 1;
4368 uint32_t macroblock_stat_enable: 1;
4369 uint32_t minimum_frame_size: 16;
4373 uint32_t intra_mb_max_bit_flag: 1;
4374 uint32_t inter_mb_max_bit_flag: 1;
4375 uint32_t frame_size_over_flag: 1;
4376 uint32_t frame_size_under_flag: 1;
4378 uint32_t intra_mb_ipcm_flag: 1;
4380 uint32_t mb_rate_ctrl_flag: 1;
4381 uint32_t min_frame_size_units: 2;
4382 uint32_t inter_mb_zero_cbp_flag: 1; //?change
4384 uint32_t non_first_pass_flag: 1;
4386 uint32_t aq_chroma_disable: 1;
4387 uint32_t aq_rounding: 3;
4388 uint32_t aq_enable: 1;
4392 uint32_t intra_mb_max_size: 12;
4394 uint32_t inter_mb_max_size: 12;
4403 uint32_t slice_delta_qp_max0: 8;
4404 uint32_t slice_delta_qp_max1: 8;
4405 uint32_t slice_delta_qp_max2: 8;
4406 uint32_t slice_delta_qp_max3: 8;
4410 uint32_t slice_delta_qp_min0: 8;
4411 uint32_t slice_delta_qp_min1: 8;
4412 uint32_t slice_delta_qp_min2: 8;
4413 uint32_t slice_delta_qp_min3: 8;
4417 uint32_t frame_bitrate_min: 14;
4418 uint32_t frame_bitrate_min_unit_mode: 1;
4419 uint32_t frame_bitrate_min_unit: 1;
4420 uint32_t frame_bitrate_max: 14;
4421 uint32_t frame_bitrate_max_unit_mode: 1;
4422 uint32_t frame_bitrate_max_unit: 1;
4426 uint32_t frame_bitrate_min_delta: 15;
4428 uint32_t frame_bitrate_max_delta: 15;
4437 uint32_t pic_qp_init_minus26: 8;
4438 uint32_t pic_num_ref_idx_l0_active_minus1: 6;
4440 uint32_t pic_num_ref_idx_l1_active_minus1: 6;
4442 uint32_t num_ref_frames: 5;
4443 uint32_t is_curr_pic_has_mmco5: 1;
4448 uint32_t pic_order_present_flag: 1;
4449 uint32_t delta_pic_order_always_zero_flag: 1;
4450 uint32_t pic_order_cnt_type: 2;
4452 uint32_t slice_group_map_type: 3;
4453 uint32_t redundant_pic_cnt_present_flag: 1;
4454 uint32_t num_slice_groups_minus1: 3;
4455 uint32_t deblock_filter_ctrl_present_flag: 1;
4456 uint32_t log2_max_frame_num_minus4: 8;
4457 uint32_t log2_max_pic_order_cnt_lsb_minus4: 8;
4461 uint32_t slice_group_change_rate: 16;
4462 uint32_t curr_pic_frame_num: 16;
4466 uint32_t current_frame_view_id: 10;
4468 uint32_t max_view_idx_l0: 4;
4470 uint32_t max_view_idx_l1: 4;
4472 uint32_t inter_view_order_disable: 1;
4478 typedef struct _gen8_avc_mbenc_curbe_data {
4480 uint32_t skip_mode_enable: 1;
4481 uint32_t adaptive_enable: 1;
4482 uint32_t bi_mix_dis: 1;
4483 uint32_t reserved0: 2;
4484 uint32_t early_ime_success_enable: 1;
4485 uint32_t reserved1: 1;
4486 uint32_t t8x8_flag_for_inter_enable: 1;
4487 uint32_t reserved2: 16;
4488 uint32_t early_ime_stop: 8;
4492 uint32_t max_num_mvs: 6;
4493 uint32_t reserved0: 10;
4494 uint32_t bi_weight: 6;
4495 uint32_t reserved1: 6;
4496 uint32_t uni_mix_disable: 1;
4497 uint32_t reserved2: 3;
4501 uint32_t max_len_sp: 8;
4502 uint32_t max_num_su: 8;
4503 uint32_t pitch_width: 16;
4507 uint32_t src_size: 2;
4508 uint32_t reserved0: 2;
4509 uint32_t mb_type_remap: 2;
4510 uint32_t src_access: 1;
4511 uint32_t ref_access: 1;
4512 uint32_t search_ctrl: 3;
4513 uint32_t dual_search_path_option: 1;
4514 uint32_t sub_pel_mode: 2;
4515 uint32_t skip_type: 1;
4516 uint32_t disable_field_cache_allocation: 1;
4517 uint32_t inter_chroma_mode: 1;
4518 uint32_t ftq_enable: 1;
4519 uint32_t bme_disable_fbr: 1;
4520 uint32_t block_based_skip_enable: 1;
4521 uint32_t inter_sad: 2;
4522 uint32_t intra_sad: 2;
4523 uint32_t sub_mb_part_mask: 7;
4524 uint32_t reserved1: 1;
4528 uint32_t picture_height_minus1: 16;
4529 uint32_t mv_restriction_in_slice_enable: 1;
4530 uint32_t delta_mv_enable: 1;
4531 uint32_t true_distortion_enable: 1;
4532 uint32_t enable_wavefront_optimization: 1;
4533 uint32_t reserved0: 1;
4534 uint32_t enable_intra_cost_scaling_for_static_frame: 1;
4535 uint32_t enable_intra_refresh: 1;
4536 uint32_t enable_widi_wa_surf: 1;
4537 uint32_t enable_widi_dirty_rect: 1;
4538 uint32_t enable_cur_fld_idr: 1;
4539 uint32_t contrained_intra_pred_flag: 1;
4540 uint32_t field_parity_flag: 1;
4541 uint32_t hme_enable: 1;
4542 uint32_t picture_type: 2;
4543 uint32_t use_actual_ref_qp_value: 1;
4547 uint32_t slice_mb_height: 16;
4548 uint32_t ref_width: 8;
4549 uint32_t ref_height: 8;
4553 uint32_t batch_buffer_end;
4557 uint32_t intra_part_mask: 5;
4558 uint32_t non_skip_zmv_added: 1;
4559 uint32_t non_skip_mode_added: 1;
4560 uint32_t luma_intra_src_corner_swap: 1;
4561 uint32_t reserved0: 8;
4562 uint32_t mv_cost_scale_factor: 2;
4563 uint32_t bilinear_enable: 1;
4564 uint32_t src_field_polarity: 1;
4565 uint32_t weightedsad_harr: 1;
4566 uint32_t ac_only_haar: 1;
4567 uint32_t ref_id_cost_mode: 1;
4568 uint32_t reserved1: 1;
4569 uint32_t skip_center_mask: 8;
4573 uint32_t mode_0_cost: 8;
4574 uint32_t mode_1_cost: 8;
4575 uint32_t mode_2_cost: 8;
4576 uint32_t mode_3_cost: 8;
4580 uint32_t mode_4_cost: 8;
4581 uint32_t mode_5_cost: 8;
4582 uint32_t mode_6_cost: 8;
4583 uint32_t mode_7_cost: 8;
4587 uint32_t mode_8_cost: 8;
4588 uint32_t mode_9_cost: 8;
4589 uint32_t ref_id_cost: 8;
4590 uint32_t chroma_intra_mode_cost: 8;
4595 uint32_t mv_0_cost: 8;
4596 uint32_t mv_1_cost: 8;
4597 uint32_t mv_2_cost: 8;
4598 uint32_t mv_3_cost: 8;
4604 uint32_t mv_4_cost: 8;
4605 uint32_t mv_5_cost: 8;
4606 uint32_t mv_6_cost: 8;
4607 uint32_t mv_7_cost: 8;
4611 uint32_t qp_prime_y: 8;
4612 uint32_t qp_prime_cb: 8;
4613 uint32_t qp_prime_cr: 8;
4614 uint32_t target_size_in_word: 8;
4618 uint32_t sic_fwd_transcoeff_threshold_0: 16;
4619 uint32_t sic_fwd_transcoeff_threshold_1: 8;
4620 uint32_t sic_fwd_transcoeff_threshold_2: 8;
4624 uint32_t sic_fwd_transcoeff_threshold_3: 8;
4625 uint32_t sic_fwd_transcoeff_threshold_4: 8;
4626 uint32_t sic_fwd_transcoeff_threshold_5: 8;
4627 uint32_t sic_fwd_transcoeff_threshold_6: 8;
4631 struct generic_search_path_delta sp_delta_0;
4632 struct generic_search_path_delta sp_delta_1;
4633 struct generic_search_path_delta sp_delta_2;
4634 struct generic_search_path_delta sp_delta_3;
4638 struct generic_search_path_delta sp_delta_4;
4639 struct generic_search_path_delta sp_delta_5;
4640 struct generic_search_path_delta sp_delta_6;
4641 struct generic_search_path_delta sp_delta_7;
4645 struct generic_search_path_delta sp_delta_8;
4646 struct generic_search_path_delta sp_delta_9;
4647 struct generic_search_path_delta sp_delta_10;
4648 struct generic_search_path_delta sp_delta_11;
4652 struct generic_search_path_delta sp_delta_12;
4653 struct generic_search_path_delta sp_delta_13;
4654 struct generic_search_path_delta sp_delta_14;
4655 struct generic_search_path_delta sp_delta_15;
4659 struct generic_search_path_delta sp_delta_16;
4660 struct generic_search_path_delta sp_delta_17;
4661 struct generic_search_path_delta sp_delta_18;
4662 struct generic_search_path_delta sp_delta_19;
4666 struct generic_search_path_delta sp_delta_20;
4667 struct generic_search_path_delta sp_delta_21;
4668 struct generic_search_path_delta sp_delta_22;
4669 struct generic_search_path_delta sp_delta_23;
4673 struct generic_search_path_delta sp_delta_24;
4674 struct generic_search_path_delta sp_delta_25;
4675 struct generic_search_path_delta sp_delta_26;
4676 struct generic_search_path_delta sp_delta_27;
4680 struct generic_search_path_delta sp_delta_28;
4681 struct generic_search_path_delta sp_delta_29;
4682 struct generic_search_path_delta sp_delta_30;
4683 struct generic_search_path_delta sp_delta_31;
4687 struct generic_search_path_delta sp_delta_32;
4688 struct generic_search_path_delta sp_delta_33;
4689 struct generic_search_path_delta sp_delta_34;
4690 struct generic_search_path_delta sp_delta_35;
4694 struct generic_search_path_delta sp_delta_36;
4695 struct generic_search_path_delta sp_delta_37;
4696 struct generic_search_path_delta sp_delta_38;
4697 struct generic_search_path_delta sp_delta_39;
4701 struct generic_search_path_delta sp_delta_40;
4702 struct generic_search_path_delta sp_delta_41;
4703 struct generic_search_path_delta sp_delta_42;
4704 struct generic_search_path_delta sp_delta_43;
4708 struct generic_search_path_delta sp_delta_44;
4709 struct generic_search_path_delta sp_delta_45;
4710 struct generic_search_path_delta sp_delta_46;
4711 struct generic_search_path_delta sp_delta_47;
4715 struct generic_search_path_delta sp_delta_48;
4716 struct generic_search_path_delta sp_delta_49;
4717 struct generic_search_path_delta sp_delta_50;
4718 struct generic_search_path_delta sp_delta_51;
4722 struct generic_search_path_delta sp_delta_52;
4723 struct generic_search_path_delta sp_delta_53;
4724 struct generic_search_path_delta sp_delta_54;
4725 struct generic_search_path_delta sp_delta_55;
4729 uint32_t intra_4x4_mode_mask: 9;
4730 uint32_t reserved0: 7;
4731 uint32_t intra_8x8_mode_mask: 9;
4732 uint32_t reserved1: 7;
4736 uint32_t intra_16x16_mode_mask: 4;
4737 uint32_t intra_chroma_mode_mask: 4;
4738 uint32_t intra_compute_type: 2;
4739 uint32_t reserved0: 22;
4743 uint32_t skip_val: 16;
4744 uint32_t mult_pred_l0_disable: 8;
4745 uint32_t mult_pred_l1_disable: 8;
4749 uint32_t intra_16x16_nondc_penalty: 8;
4750 uint32_t intra_8x8_nondc_penalty: 8;
4751 uint32_t intra_4x4_nondc_penalty: 8;
4752 uint32_t reserved0: 8;
4756 uint32_t list0_ref_id0_field_parity: 1;
4757 uint32_t list0_ref_id1_field_parity: 1;
4758 uint32_t list0_ref_id2_field_parity: 1;
4759 uint32_t list0_ref_id3_field_parity: 1;
4760 uint32_t list0_ref_id4_field_parity: 1;
4761 uint32_t list0_ref_id5_field_parity: 1;
4762 uint32_t list0_ref_id6_field_parity: 1;
4763 uint32_t list0_ref_id7_field_parity: 1;
4764 uint32_t list1_ref_id0_frm_field_parity: 1;
4765 uint32_t list1_ref_id1_frm_field_parity: 1;
4766 uint32_t widi_intra_refresh_en: 2;
4767 uint32_t arbitray_num_mbs_per_slice: 1;
4768 uint32_t force_non_skip_check: 1;
4769 uint32_t disable_enc_skip_check: 1;
4770 uint32_t enable_direct_bias_adjustment: 1;
4771 uint32_t enable_global_motion_bias_adjustment: 1;
4772 uint32_t b_force_to_skip: 1;
4773 uint32_t reserved0: 6;
4774 uint32_t list1_ref_id0_field_parity: 1;
4775 uint32_t list1_ref_id1_field_parity: 1;
4776 uint32_t mad_enable_falg: 1;
4777 uint32_t roi_enable_flag: 1;
4778 uint32_t enable_mb_flatness_check_optimization: 1;
4779 uint32_t b_direct_mode: 1;
4780 uint32_t mb_brc_enable: 1;
4781 uint32_t b_original_bff: 1;
4785 uint32_t panic_mode_mb_threshold: 16;
4786 uint32_t small_mb_size_in_word: 8;
4787 uint32_t large_mb_size_in_word: 8;
4791 uint32_t num_ref_idx_l0_minus_one: 8;
4792 uint32_t hme_combined_extra_sus: 8;
4793 uint32_t num_ref_idx_l1_minus_one: 8;
4794 uint32_t enable_cabac_work_around: 1;
4795 uint32_t reserved0: 3;
4796 uint32_t is_fwd_frame_short_term_ref: 1;
4797 uint32_t check_all_fractional_enable: 1;
4798 uint32_t hme_combine_overlap: 2;
4802 uint32_t skip_mode_enable: 1;
4803 uint32_t adaptive_enable: 1;
4804 uint32_t bi_mix_dis: 1;
4805 uint32_t reserved0: 2;
4806 uint32_t early_ime_success_enable: 1;
4807 uint32_t reserved1: 1;
4808 uint32_t t8x8_flag_for_inter_enable: 1;
4809 uint32_t reserved2: 16;
4810 uint32_t early_ime_stop: 8;
4815 uint32_t max_len_sp: 8;
4816 uint32_t max_num_su: 8;
4817 uint32_t ref_threshold: 16;
4821 uint32_t reserved0: 8;
4822 uint32_t hme_ref_windows_comb_threshold: 8;
4823 uint32_t ref_width: 8;
4824 uint32_t ref_height: 8;
4828 uint32_t dist_scale_factor_ref_id0_list0: 16;
4829 uint32_t dist_scale_factor_ref_id1_list0: 16;
4833 uint32_t dist_scale_factor_ref_id2_list0: 16;
4834 uint32_t dist_scale_factor_ref_id3_list0: 16;
4838 uint32_t dist_scale_factor_ref_id4_list0: 16;
4839 uint32_t dist_scale_factor_ref_id5_list0: 16;
4843 uint32_t dist_scale_factor_ref_id6_list0: 16;
4844 uint32_t dist_scale_factor_ref_id7_list0: 16;
4848 uint32_t actual_qp_value_for_ref_id0_list0: 8;
4849 uint32_t actual_qp_value_for_ref_id1_list0: 8;
4850 uint32_t actual_qp_value_for_ref_id2_list0: 8;
4851 uint32_t actual_qp_value_for_ref_id3_list0: 8;
4855 uint32_t actual_qp_value_for_ref_id4_list0: 8;
4856 uint32_t actual_qp_value_for_ref_id5_list0: 8;
4857 uint32_t actual_qp_value_for_ref_id6_list0: 8;
4858 uint32_t actual_qp_value_for_ref_id7_list0: 8;
4862 uint32_t actual_qp_value_for_ref_id0_list1: 8;
4863 uint32_t actual_qp_value_for_ref_id1_list1: 8;
4864 uint32_t ref_cost: 16;
4868 uint32_t mb_qp_read_factor: 8;
4869 uint32_t intra_cost_sf: 8;
4870 uint32_t max_vmv_r: 16;
4874 uint32_t widi_intra_refresh_mbx: 16;
4875 uint32_t widi_intra_refresh_unit_in_mb_minus1: 8;
4876 uint32_t widi_intra_refresh_qp_delta: 8;
4880 uint32_t roi_1_x_left: 16;
4881 uint32_t roi_1_y_top: 16;
4885 uint32_t roi_1_x_right: 16;
4886 uint32_t roi_1_y_bottom: 16;
4890 uint32_t roi_2_x_left: 16;
4891 uint32_t roi_2_y_top: 16;
4895 uint32_t roi_2_x_right: 16;
4896 uint32_t roi_2_y_bottom: 16;
4900 uint32_t roi_3_x_left: 16;
4901 uint32_t roi_3_y_top: 16;
4905 uint32_t roi_3_x_right: 16;
4906 uint32_t roi_3_y_bottom: 16;
4910 uint32_t roi_4_x_left: 16;
4911 uint32_t roi_4_y_top: 16;
4915 uint32_t roi_4_x_right: 16;
4916 uint32_t roi_4_y_bottom: 16;
4920 uint32_t roi_1_dqp_prime_y: 8;
4921 uint32_t roi_2_dqp_prime_y: 8;
4922 uint32_t roi_3_dqp_prime_y: 8;
4923 uint32_t roi_4_dqp_prime_y: 8;
4927 uint32_t hme_mv_cost_scaling_factor: 8;
4928 int32_t reserved0: 8;
4929 int32_t widi_intra_refresh_mby: 16;
4937 uint32_t cabac_wa_zone0_threshold: 16;
4938 uint32_t cabac_wa_zone1_threshold: 16;
4942 uint32_t cabac_wa_zone2_threshold: 16;
4943 uint32_t cabac_wa_zone3_threshold: 16;
4947 uint32_t cabac_wa_zone0_intra_min_qp: 8;
4948 uint32_t cabac_wa_zone1_intra_min_qp: 8;
4949 uint32_t cabac_wa_zone2_intra_min_qp: 8;
4950 uint32_t cabac_wa_zone3_intra_min_qp: 8;
4962 uint32_t mb_data_surf_index;
4966 uint32_t mv_data_surf_index;
4970 uint32_t i_dist_surf_index;
4974 uint32_t src_y_surf_index;
4978 uint32_t mb_specific_data_surf_index;
4982 uint32_t aux_vme_out_surf_index;
4986 uint32_t curr_ref_pic_sel_surf_index;
4990 uint32_t hme_mv_pred_fwd_bwd_surf_index;
4994 uint32_t hme_dist_surf_index;
4998 uint32_t slice_map_surf_index;
5002 uint32_t fwd_frm_mb_data_surf_index;
5006 uint32_t fwd_frm_mv_surf_index;
5010 uint32_t mb_qp_buffer;
5014 uint32_t mb_brc_lut;
5018 uint32_t vme_inter_prediction_surf_index;
5022 uint32_t vme_inter_prediction_mr_surf_index;
5026 uint32_t flatness_chk_surf_index;
5030 uint32_t mad_surf_index;
5034 uint32_t force_non_skip_mb_map_surface;
5038 uint32_t widi_wa_surf_index;
5042 uint32_t brc_curbe_surf_index;
5046 uint32_t static_detection_cost_table_index;
5053 } gen8_avc_mbenc_curbe_data;
5055 typedef struct _gen8_avc_frame_brc_update_curbe_data {
5057 uint32_t target_size;
5061 uint32_t frame_number;
5065 uint32_t size_of_pic_headers;
5069 uint32_t start_gadj_frame0: 16;
5070 uint32_t start_gadj_frame1: 16;
5074 uint32_t start_gadj_frame2: 16;
5075 uint32_t start_gadj_frame3: 16;
5079 uint32_t target_size_flag: 8;
5080 uint32_t brc_flag: 8;
5081 uint32_t max_num_paks: 8;
5082 uint32_t cur_frame_type: 8;
5086 uint32_t num_skip_frames: 8;
5087 uint32_t minimum_qp: 8;
5088 uint32_t maximum_qp: 8;
5089 uint32_t widi_intra_refresh_mode: 8;
5093 uint32_t size_skip_frames;
5097 uint32_t start_global_adjust_mult_0: 8;
5098 uint32_t start_global_adjust_mult_1: 8;
5099 uint32_t start_global_adjust_mult_2: 8;
5100 uint32_t start_global_adjust_mult_3: 8;
5104 uint32_t start_global_adjust_mult_4: 8;
5105 uint32_t start_global_adjust_div_0: 8;
5106 uint32_t start_global_adjust_div_1: 8;
5107 uint32_t start_global_adjust_div_2: 8;
5111 uint32_t start_global_adjust_div_3: 8;
5112 uint32_t start_global_adjust_div_4: 8;
5113 uint32_t qp_threshold_0: 8;
5114 uint32_t qp_threshold_1: 8;
5118 uint32_t qp_threshold_2: 8;
5119 uint32_t qp_threshold_3: 8;
5120 uint32_t g_rate_ratio_threshold_0: 8;
5121 uint32_t g_rate_ratio_threshold_1: 8;
5125 uint32_t g_rate_ratio_threshold_2: 8;
5126 uint32_t g_rate_ratio_threshold_3: 8;
5127 uint32_t g_rate_ratio_threshold_4: 8;
5128 uint32_t g_rate_ratio_threshold_5: 8;
5132 uint32_t g_rate_ratio_threshold_qp_0: 8;
5133 uint32_t g_rate_ratio_threshold_qp_1: 8;
5134 uint32_t g_rate_ratio_threshold_qp_2: 8;
5135 uint32_t g_rate_ratio_threshold_qp_3: 8;
5139 uint32_t g_rate_ratio_threshold_qp_4: 8;
5140 uint32_t g_rate_ratio_threshold_qp_5: 8;
5141 uint32_t g_rate_ratio_threshold_qp_6: 8;
5142 uint32_t qp_index_of_cur_pic: 8;
5146 uint32_t widi_qp_intra_resresh: 8;
5147 uint32_t reserved0: 8;
5151 uint32_t widi_intra_refresh_y_pos: 16;
5152 uint32_t widi_intra_refresh_x_pos: 16;
5156 uint32_t widi_intra_refresh_height: 16;
5157 uint32_t widi_intra_refresh_width: 16;
5159 } gen8_avc_frame_brc_update_curbe_data;
5161 typedef struct _gen8_avc_scaling4x_curbe_data {
5163 uint32_t input_picture_width : 16;
5164 uint32_t input_picture_height : 16;
5168 uint32_t input_y_bti;
5172 uint32_t output_y_bti;
5176 uint32_t input_y_bti_bottom_field;
5180 uint32_t output_y_bti_bottom_field;
5184 uint32_t flatness_threshold;
5188 uint32_t enable_mb_flatness_check: 1;
5189 uint32_t enable_mb_variance_output: 1;
5190 uint32_t enable_mb_pixel_average_output: 1;
5191 uint32_t enable_block8x8_statistics_output: 1;
5192 uint32_t reserved0: 28;
5200 uint32_t flatness_output_bti_top_field;
5204 uint32_t flatness_output_bti_bottom_field;
5208 uint32_t mbv_proc_states_bti_top_field;
5212 uint32_t mbv_proc_states_bti_bottom_field;
5214 } gen8_avc_scaling4x_curbe_data;
5216 typedef enum _gen8_avc_binding_table_offset_mbenc {
5217 GEN8_AVC_MBENC_MFC_AVC_PAK_OBJ_CM = 0,
5218 GEN8_AVC_MBENC_IND_MV_DATA_CM = 1,
5219 GEN8_AVC_MBENC_BRC_DISTORTION_CM = 2, // For BRC distortion for I
5220 GEN8_AVC_MBENC_CURR_Y_CM = 3,
5221 GEN8_AVC_MBENC_CURR_UV_CM = 4,
5222 GEN8_AVC_MBENC_MB_SPECIFIC_DATA_CM = 5,
5223 GEN8_AVC_MBENC_AUX_VME_OUT_CM = 6,
5224 GEN8_AVC_MBENC_REFPICSELECT_L0_CM = 7,
5225 GEN8_AVC_MBENC_MV_DATA_FROM_ME_CM = 8,
5226 GEN8_AVC_MBENC_4xME_DISTORTION_CM = 9,
5227 GEN8_AVC_MBENC_SLICEMAP_DATA_CM = 10,
5228 GEN8_AVC_MBENC_FWD_MB_DATA_CM = 11,
5229 GEN8_AVC_MBENC_FWD_MV_DATA_CM = 12,
5230 GEN8_AVC_MBENC_MBQP_CM = 13,
5231 GEN8_AVC_MBENC_MBBRC_CONST_DATA_CM = 14,
5232 GEN8_AVC_MBENC_VME_INTER_PRED_CURR_PIC_IDX_0_CM = 15,
5233 GEN8_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX0_CM = 16,
5234 GEN8_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX0_0_CM = 17,
5235 GEN8_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX1_CM = 18,
5236 GEN8_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX1_0_CM = 19,
5237 GEN8_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX2_CM = 20,
5238 GEN8_AVC_MBENC_RESERVED0_CM = 21,
5239 GEN8_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX3_CM = 22,
5240 GEN8_AVC_MBENC_RESERVED1_CM = 23,
5241 GEN8_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX4_CM = 24,
5242 GEN8_AVC_MBENC_RESERVED2_CM = 25,
5243 GEN8_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX5_CM = 26,
5244 GEN8_AVC_MBENC_RESERVED3_CM = 27,
5245 GEN8_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX6_CM = 28,
5246 GEN8_AVC_MBENC_RESERVED4_CM = 29,
5247 GEN8_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX7_CM = 30,
5248 GEN8_AVC_MBENC_RESERVED5_CM = 31,
5249 GEN8_AVC_MBENC_VME_INTER_PRED_CURR_PIC_IDX_1_CM = 32,
5250 GEN8_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX0_1_CM = 33,
5251 GEN8_AVC_MBENC_RESERVED6_CM = 34,
5252 GEN8_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX1_1_CM = 35,
5253 GEN8_AVC_MBENC_RESERVED7_CM = 36,
5254 GEN8_AVC_MBENC_FLATNESS_CHECK_CM = 37,
5255 GEN8_AVC_MBENC_MAD_DATA_CM = 38,
5256 GEN8_AVC_MBENC_FORCE_NONSKIP_MB_MAP_CM = 39,
5257 GEN8_AVC_MBENC_WIDI_WA_DATA_CM = 40,
5258 GEN8_AVC_MBENC_BRC_CURBE_DATA_CM = 41,
5259 GEN8_AVC_MBENC_STATIC_FRAME_DETECTION_OUTPUT_CM = 42,
5260 GEN8_AVC_MBENC_NUM_SURFACES_CM = 43
5261 } gen8_avc_binding_table_offset_mbenc;
5263 typedef enum _gen8_avc_binding_table_offset_scaling {
5264 GEN8_SCALING_FRAME_SRC_Y_CM = 0,
5265 GEN8_SCALING_FRAME_DST_Y_CM = 1,
5266 GEN8_SCALING_FIELD_TOP_SRC_Y_CM = 0,
5267 GEN8_SCALING_FIELD_TOP_DST_Y_CM = 1,
5268 GEN8_SCALING_FIELD_BOT_SRC_Y_CM = 2,
5269 GEN8_SCALING_FIELD_BOT_DST_Y_CM = 3,
5270 GEN8_SCALING_FRAME_FLATNESS_DST_CM = 4,
5271 GEN8_SCALING_FIELD_TOP_FLATNESS_DST_CM = 4,
5272 GEN8_SCALING_FIELD_BOT_FLATNESS_DST_CM = 5,
5273 GEN8_SCALING_FRAME_MBVPROCSTATS_DST_CM = 6,
5274 GEN8_SCALING_FIELD_TOP_MBVPROCSTATS_DST_CM = 6,
5275 GEN8_SCALING_FIELD_BOT_MBVPROCSTATS_DST_CM = 7,
5276 GEN8_SCALING_NUM_SURFACES_CM = 8
5277 } gen8_avc_binding_table_offset_scaling;
5279 typedef struct _gen8_avc_me_curbe_data {
5281 uint32_t skip_mode_enable: 1;
5282 uint32_t adaptive_enable: 1;
5283 uint32_t bi_mix_dis: 1;
5284 uint32_t reserved0: 2;
5285 uint32_t early_ime_success_enable: 1;
5286 uint32_t reserved1: 1;
5287 uint32_t t8x8_flag_for_inter_enable: 1;
5288 uint32_t reserved2: 16;
5289 uint32_t early_ime_stop: 8;
5293 uint32_t max_num_mvs: 6;
5294 uint32_t reserved0: 10;
5295 uint32_t bi_weight: 6;
5296 uint32_t reserved1: 6;
5297 uint32_t uni_mix_disable: 1;
5298 uint32_t reserved2: 3;
5302 uint32_t max_len_sp: 8;
5303 uint32_t max_num_su: 8;
5304 uint32_t reserved0: 16;
5308 uint32_t src_size: 2;
5309 uint32_t reserved0: 2;
5310 uint32_t mb_type_remap: 2;
5311 uint32_t src_access: 1;
5312 uint32_t ref_access: 1;
5313 uint32_t search_ctrl: 3;
5314 uint32_t dual_search_path_option: 1;
5315 uint32_t sub_pel_mode: 2;
5316 uint32_t skip_type: 1;
5317 uint32_t disable_field_cache_allocation: 1;
5318 uint32_t inter_chroma_mode: 1;
5319 uint32_t ft_enable: 1;
5320 uint32_t bme_disable_fbr: 1;
5321 uint32_t block_based_skip_enable: 1;
5322 uint32_t inter_sad: 2;
5323 uint32_t intra_sad: 2;
5324 uint32_t sub_mb_part_mask: 7;
5325 uint32_t reserved1: 1;
5329 uint32_t reserved0: 8;
5330 uint32_t picture_height_minus1: 8;
5331 uint32_t picture_width: 8;
5332 uint32_t reserved1: 8;
5336 uint32_t reserved0: 8;
5337 uint32_t qp_prime_y: 8;
5338 uint32_t ref_width: 8;
5339 uint32_t ref_height: 8;
5343 uint32_t reserved0: 3;
5344 uint32_t write_distortions: 1;
5345 uint32_t use_mv_from_prev_step: 1;
5346 uint32_t reserved1: 3;
5347 uint32_t super_combine_dist: 8;
5348 uint32_t max_vmvr: 16;
5352 uint32_t reserved0: 16;
5353 uint32_t mv_cost_scale_factor: 2;
5354 uint32_t bilinear_enable: 1;
5355 uint32_t src_field_polarity: 1;
5356 uint32_t weightedsad_harr: 1;
5357 uint32_t ac_only_haar: 1;
5358 uint32_t ref_id_cost_mode: 1;
5359 uint32_t reserved1: 1;
5360 uint32_t skip_center_mask: 8;
5364 uint32_t mode_0_cost: 8;
5365 uint32_t mode_1_cost: 8;
5366 uint32_t mode_2_cost: 8;
5367 uint32_t mode_3_cost: 8;
5371 uint32_t mode_4_cost: 8;
5372 uint32_t mode_5_cost: 8;
5373 uint32_t mode_6_cost: 8;
5374 uint32_t mode_7_cost: 8;
5378 uint32_t mode_8_cost: 8;
5379 uint32_t mode_9_cost: 8;
5380 uint32_t ref_id_cost: 8;
5381 uint32_t chroma_intra_mode_cost: 8;
5385 uint32_t mv_0_cost: 8;
5386 uint32_t mv_1_cost: 8;
5387 uint32_t mv_2_cost: 8;
5388 uint32_t mv_3_cost: 8;
5392 uint32_t mv_4_cost: 8;
5393 uint32_t mv_5_cost: 8;
5394 uint32_t mv_6_cost: 8;
5395 uint32_t mv_7_cost: 8;
5399 uint32_t num_ref_idx_l0_minus1: 8;
5400 uint32_t num_ref_idx_l1_minus1: 8;
5401 uint32_t actual_mb_width: 8;
5402 uint32_t actual_mb_height: 8;
5406 uint32_t l0_ref_id0_field_parity: 1;
5407 uint32_t l0_ref_id1_field_parity: 1;
5408 uint32_t l0_ref_id2_field_parity: 1;
5409 uint32_t l0_ref_id3_field_parity: 1;
5410 uint32_t l0_ref_id4_field_parity: 1;
5411 uint32_t l0_ref_id5_field_parity: 1;
5412 uint32_t l0_ref_id6_field_parity: 1;
5413 uint32_t l0_ref_id7_field_parity: 1;
5414 uint32_t l1_ref_id0_field_parity: 1;
5415 uint32_t l1_ref_id1_field_parity: 1;
5416 uint32_t reserved: 22;
5420 uint32_t prev_mv_read_pos_factor : 8;
5421 uint32_t mv_shift_factor : 8;
5422 uint32_t reserved: 16;
5426 struct generic_search_path_delta sp_delta_0;
5427 struct generic_search_path_delta sp_delta_1;
5428 struct generic_search_path_delta sp_delta_2;
5429 struct generic_search_path_delta sp_delta_3;
5433 struct generic_search_path_delta sp_delta_4;
5434 struct generic_search_path_delta sp_delta_5;
5435 struct generic_search_path_delta sp_delta_6;
5436 struct generic_search_path_delta sp_delta_7;
5440 struct generic_search_path_delta sp_delta_8;
5441 struct generic_search_path_delta sp_delta_9;
5442 struct generic_search_path_delta sp_delta_10;
5443 struct generic_search_path_delta sp_delta_11;
5447 struct generic_search_path_delta sp_delta_12;
5448 struct generic_search_path_delta sp_delta_13;
5449 struct generic_search_path_delta sp_delta_14;
5450 struct generic_search_path_delta sp_delta_15;
5454 struct generic_search_path_delta sp_delta_16;
5455 struct generic_search_path_delta sp_delta_17;
5456 struct generic_search_path_delta sp_delta_18;
5457 struct generic_search_path_delta sp_delta_19;
5461 struct generic_search_path_delta sp_delta_20;
5462 struct generic_search_path_delta sp_delta_21;
5463 struct generic_search_path_delta sp_delta_22;
5464 struct generic_search_path_delta sp_delta_23;
5468 struct generic_search_path_delta sp_delta_24;
5469 struct generic_search_path_delta sp_delta_25;
5470 struct generic_search_path_delta sp_delta_26;
5471 struct generic_search_path_delta sp_delta_27;
5475 struct generic_search_path_delta sp_delta_28;
5476 struct generic_search_path_delta sp_delta_29;
5477 struct generic_search_path_delta sp_delta_30;
5478 struct generic_search_path_delta sp_delta_31;
5482 struct generic_search_path_delta sp_delta_32;
5483 struct generic_search_path_delta sp_delta_33;
5484 struct generic_search_path_delta sp_delta_34;
5485 struct generic_search_path_delta sp_delta_35;
5489 struct generic_search_path_delta sp_delta_36;
5490 struct generic_search_path_delta sp_delta_37;
5491 struct generic_search_path_delta sp_delta_38;
5492 struct generic_search_path_delta sp_delta_39;
5496 struct generic_search_path_delta sp_delta_40;
5497 struct generic_search_path_delta sp_delta_41;
5498 struct generic_search_path_delta sp_delta_42;
5499 struct generic_search_path_delta sp_delta_43;
5503 struct generic_search_path_delta sp_delta_44;
5504 struct generic_search_path_delta sp_delta_45;
5505 struct generic_search_path_delta sp_delta_46;
5506 struct generic_search_path_delta sp_delta_47;
5510 struct generic_search_path_delta sp_delta_48;
5511 struct generic_search_path_delta sp_delta_49;
5512 struct generic_search_path_delta sp_delta_50;
5513 struct generic_search_path_delta sp_delta_51;
5517 struct generic_search_path_delta sp_delta_52;
5518 struct generic_search_path_delta sp_delta_53;
5519 struct generic_search_path_delta sp_delta_54;
5520 struct generic_search_path_delta sp_delta_55;
5532 uint32_t _4x_memv_output_data_surf_index;
5536 uint32_t _16x_32x_memv_input_data_surf_index;
5540 uint32_t _4x_me_output_dist_surf_index;
5544 uint32_t _4x_me_output_brc_dist_surf_index;
5548 uint32_t vme_fwd_inter_pred_surf_index;
5552 uint32_t vme_bdw_inter_pred_surf_index;
5559 } gen8_avc_me_curbe_data;
5561 typedef enum _gen8_avc_binding_table_offset_me {
5562 GEN8_AVC_ME_MV_DATA_SURFACE_CM = 0,
5563 GEN8_AVC_16xME_MV_DATA_SURFACE_CM = 1,
5564 GEN8_AVC_32xME_MV_DATA_SURFACE_CM = 1,
5565 GEN8_AVC_ME_DISTORTION_SURFACE_CM = 2,
5566 GEN8_AVC_ME_BRC_DISTORTION_CM = 3,
5567 GEN8_AVC_ME_RESERVED0_CM = 4,
5568 GEN8_AVC_ME_CURR_FOR_FWD_REF_CM = 5,
5569 GEN8_AVC_ME_FWD_REF_IDX0_CM = 6,
5570 GEN8_AVC_ME_RESERVED1_CM = 7,
5571 GEN8_AVC_ME_FWD_REF_IDX1_CM = 8,
5572 GEN8_AVC_ME_RESERVED2_CM = 9,
5573 GEN8_AVC_ME_FWD_REF_IDX2_CM = 10,
5574 GEN8_AVC_ME_RESERVED3_CM = 11,
5575 GEN8_AVC_ME_FWD_REF_IDX3_CM = 12,
5576 GEN8_AVC_ME_RESERVED4_CM = 13,
5577 GEN8_AVC_ME_FWD_REF_IDX4_CM = 14,
5578 GEN8_AVC_ME_RESERVED5_CM = 15,
5579 GEN8_AVC_ME_FWD_REF_IDX5_CM = 16,
5580 GEN8_AVC_ME_RESERVED6_CM = 17,
5581 GEN8_AVC_ME_FWD_REF_IDX6_CM = 18,
5582 GEN8_AVC_ME_RESERVED7_CM = 19,
5583 GEN8_AVC_ME_FWD_REF_IDX7_CM = 20,
5584 GEN8_AVC_ME_RESERVED8_CM = 21,
5585 GEN8_AVC_ME_CURR_FOR_BWD_REF_CM = 22,
5586 GEN8_AVC_ME_BWD_REF_IDX0_CM = 23,
5587 GEN8_AVC_ME_RESERVED9_CM = 24,
5588 GEN8_AVC_ME_BWD_REF_IDX1_CM = 25,
5589 GEN8_AVC_ME_RESERVED10_CM = 26,
5590 GEN8_AVC_ME_NUM_SURFACES_CM = 27
5591 } gen8_avc_binding_table_offset_me;
5593 #endif /* I965_AVC_ENCODER_H */