OSDN Git Service

intel-vaapi-driver 1.8.1.pre1
[android-x86/hardware-intel-common-vaapi.git] / src / gen9_avc_encoder.h
1 /*
2  * Copyright @ 2017 Intel Corporation
3  *
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:
11  *
12  * The above copyright notice and this permission notice (including the
13  * next paragraph) shall be included in all copies or substantial portions
14  * of the Software.
15  *
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.
23  *
24  * Authors:
25  *    Pengfei Qu <Pengfei.qu@intel.com>
26  *
27  */
28
29 #ifndef GEN9_AVC_ENCODER_H
30 #define GEN9_AVC_ENCODER_H
31
32 #include "i965_encoder_common.h"
33 /*
34 common structure and define
35 gen9_avc_surface structure
36 */
37 #define MAX_AVC_ENCODER_SURFACES        64
38 #define MAX_AVC_PAK_PASS_NUM        4
39
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)
43
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
50
51 struct gen9_mfx_avc_img_state
52 {
53     union {
54         struct {
55             uint32_t dword_length:12;
56             uint32_t pad0:4;
57             uint32_t sub_opcode_b:5;
58             uint32_t sub_opcode_a:3;
59             uint32_t command_opcode:3;
60             uint32_t pipeline:2;
61             uint32_t command_type:3;
62         };
63
64         uint32_t value;
65     } dw0;
66
67     struct {
68         uint32_t frame_size_in_mbs:16;//minus1
69         uint32_t pad0:16;
70     } dw1;
71
72     struct {
73         uint32_t frame_width_in_mbs_minus1:8; //minus1
74         uint32_t pad0:8;
75         uint32_t frame_height_in_mbs_minus1:8;  //minus1
76         uint32_t pad1:8;
77     } dw2;
78
79     struct {
80         uint32_t pad0:8;
81         uint32_t image_structure:2;
82         uint32_t weighted_bipred_idc:2;
83         uint32_t weighted_pred_flag:1;
84         uint32_t brc_domain_rate_control_enable:1;
85         uint32_t pad1:2;
86         uint32_t chroma_qp_offset:5;
87         uint32_t pad2:3;
88         uint32_t second_chroma_qp_offset:5;
89         uint32_t pad3:3;
90     } dw3;
91
92     struct {
93         uint32_t field_picture_flag:1;
94         uint32_t mbaff_mode_active:1;
95         uint32_t frame_mb_only_flag:1;
96         uint32_t transform_8x8_idct_mode_flag:1;
97         uint32_t direct_8x8_interface_flag:1;
98         uint32_t constrained_intra_prediction_flag:1;
99         uint32_t current_img_dispoable_flag:1;
100         uint32_t entropy_coding_flag:1;
101         uint32_t mb_mv_format_flag:1;
102         uint32_t pad0:1;
103         uint32_t chroma_format_idc:2;
104         uint32_t mv_unpacked_flag:1;
105         uint32_t insert_test_flag:1;
106         uint32_t load_slice_pointer_flag:1;
107         uint32_t macroblock_stat_enable:1;
108         uint32_t minimum_frame_size:16;
109     } dw4;
110
111     struct {
112         uint32_t intra_mb_max_bit_flag:1;
113         uint32_t inter_mb_max_bit_flag:1;
114         uint32_t frame_size_over_flag:1;
115         uint32_t frame_size_under_flag:1;
116         uint32_t pad0:3;
117         uint32_t intra_mb_ipcm_flag:1;
118         uint32_t pad1:1;
119         uint32_t mb_rate_ctrl_flag:1;
120         uint32_t min_frame_size_units:2;
121         uint32_t inter_mb_zero_cbp_flag:1; //?change
122         uint32_t pad2:3;
123         uint32_t non_first_pass_flag:1;
124         uint32_t pad3:10;
125         uint32_t aq_chroma_disable:1;
126         uint32_t aq_rounding:3;
127         uint32_t aq_enable:1;
128     } dw5;
129
130     struct {
131         uint32_t intra_mb_max_size:12;
132         uint32_t pad0:4;
133         uint32_t inter_mb_max_size:12;
134         uint32_t pad1:4;
135     } dw6;
136
137     struct {
138         uint32_t vsl_top_mb_trans8x8_flag:1;
139         uint32_t pad0:31;
140     } dw7;
141
142     struct {
143         uint32_t slice_delta_qp_max0:8;
144         uint32_t slice_delta_qp_max1:8;
145         uint32_t slice_delta_qp_max2:8;
146         uint32_t slice_delta_qp_max3:8;
147     } dw8;
148
149     struct {
150         uint32_t slice_delta_qp_min0:8;
151         uint32_t slice_delta_qp_min1:8;
152         uint32_t slice_delta_qp_min2:8;
153         uint32_t slice_delta_qp_min3:8;
154     } dw9;
155
156     struct {
157         uint32_t frame_bitrate_min:14;
158         uint32_t frame_bitrate_min_unit_mode:1;
159         uint32_t frame_bitrate_min_unit:1;
160         uint32_t frame_bitrate_max:14;
161         uint32_t frame_bitrate_max_unit_mode:1;
162         uint32_t frame_bitrate_max_unit:1;
163     } dw10;
164
165     struct {
166         uint32_t frame_bitrate_min_delta:15;
167         uint32_t pad0:1;
168         uint32_t frame_bitrate_max_delta:15;
169         uint32_t slice_tsats_streamout_enable:1;
170     } dw11;
171
172     struct {
173         uint32_t pad0:16;
174         uint32_t mpeg2_old_mode_select:1;
175         uint32_t vad_noa_mux_select:1;
176         uint32_t vad_error_logic:1;
177         uint32_t pad1:1;
178         uint32_t vmd_error_logic:1;
179         uint32_t pad2:11;
180     } dw12;
181
182     struct {
183         uint32_t pic_qp_init_minus26:8;
184         uint32_t pic_num_ref_idx_l0_active_minus1:6;
185         uint32_t pad0:2;
186         uint32_t pic_num_ref_idx_l1_active_minus1:6;
187         uint32_t pad1:2;
188         uint32_t num_ref_frames:5;
189         uint32_t is_curr_pic_has_mmco5:1;
190         uint32_t pad2:2;
191     } dw13;
192
193     struct {
194         uint32_t pic_order_present_flag:1;
195         uint32_t delta_pic_order_always_zero_flag:1;
196         uint32_t pic_order_cnt_type:2;
197         uint32_t pad0:4;
198         uint32_t slice_group_map_type:3;
199         uint32_t redundant_pic_cnt_present_flag:1;
200         uint32_t num_slice_groups_minus1:3;
201         uint32_t deblock_filter_ctrl_present_flag:1;
202         uint32_t log2_max_frame_num_minus4:8;
203         uint32_t log2_max_pic_order_cnt_lsb_minus4:8;
204     } dw14;
205
206     struct {
207         uint32_t slice_group_change_rate:16;
208         uint32_t curr_pic_frame_num:16;
209     } dw15;
210
211     struct {
212         uint32_t current_frame_view_id:10;
213         uint32_t pad0:2;
214         uint32_t max_view_idx_l0:4;
215         uint32_t pad1:2;
216         uint32_t max_view_idx_l1:4;
217         uint32_t pad2:9;
218         uint32_t inter_view_order_disable:1;
219     } dw16;
220
221     struct {
222         uint32_t fqp:3;                         // Must be zero for SKL
223         uint32_t fqp_offset:3;                  // Must be zero for SKL
224         uint32_t pad0:2;
225         uint32_t ext_brc_dm_stat_en:1;          // Must be zero for SKL
226         uint32_t pad1:7;
227         uint32_t brc_dm_avg_mb_qp:6;            // Must be zero for SKL
228         uint32_t pad2:10;
229     } dw17;
230
231     struct {
232         uint32_t brc_domain_target_frame_size;
233     } dw18;
234
235     struct {
236         uint32_t threshold_size_in_bytes;
237     } dw19;
238
239     struct {
240         uint32_t target_slice_size_in_bytes;
241     } dw20;
242 };
243
244 /*
245    the definition for encoder status
246 */
247 struct encoder_status
248 {
249     uint32_t image_status_mask;
250     uint32_t image_status_ctrl;
251     uint32_t bs_byte_count_frame;
252     uint32_t bs_byte_count_frame_nh;
253     uint32_t mfc_qp_status_count;
254     uint32_t media_index;
255 };
256
257 struct encoder_status_buffer_internal
258 {
259     dri_bo *bo;
260     uint32_t image_status_mask_offset;
261     uint32_t image_status_ctrl_offset;
262     uint32_t bs_byte_count_frame_offset;
263     uint32_t bs_byte_count_frame_nh_offset;
264     uint32_t mfc_qp_status_count_offset;
265     uint32_t media_index_offset;
266
267     uint32_t bs_byte_count_frame_reg_offset;
268     uint32_t bs_byte_count_frame_nh_reg_offset;
269     uint32_t image_status_mask_reg_offset;
270     uint32_t image_status_ctrl_reg_offset;
271     uint32_t mfc_qp_status_count_reg_offset;
272     uint32_t status_buffer_size;
273     uint32_t base_offset;
274 };
275
276 /* BRC define */
277 #define CLIP(x, min, max)                                             \
278     {                                                                   \
279         (x) = (((x) > (max)) ? (max) : (((x) < (min)) ? (min) : (x)));  \
280     }
281
282 typedef struct _kernel_header_
283 {
284     uint32_t       reserved                        : 6;
285     uint32_t       kernel_start_pointer            : 26;
286 } kernel_header;
287
288 struct generic_search_path_delta
289 {
290     uint8_t search_path_delta_x:4;
291     uint8_t search_path_delta_y:4;
292 };
293
294 struct scaling_param
295 {
296     VASurfaceID             curr_pic;
297     void                    *p_scaling_bti;
298     struct object_surface   *input_surface;
299     struct object_surface   *output_surface;
300     uint32_t                input_frame_width;
301     uint32_t                input_frame_height;
302     uint32_t                output_frame_width;
303     uint32_t                output_frame_height;
304     uint32_t                vert_line_stride;
305     uint32_t                vert_line_stride_offset;
306     bool                    scaling_out_use_16unorm_surf_fmt;
307     bool                    scaling_out_use_32unorm_surf_fmt;
308     bool                    mbv_proc_stat_enabled;
309     bool                    enable_mb_flatness_check;
310     bool                    enable_mb_variance_output;
311     bool                    enable_mb_pixel_average_output;
312     bool                    use_4x_scaling;
313     bool                    use_16x_scaling;
314     bool                    use_32x_scaling;
315     bool                    blk8x8_stat_enabled;
316     struct i965_gpe_resource            *pres_mbv_proc_stat_buffer;
317     struct i965_gpe_resource            *pres_flatness_check_surface;
318 };
319
320 struct avc_surface_param{
321     uint32_t frame_width;
322     uint32_t frame_height;
323 };
324 struct me_param{
325     uint32_t hme_type;
326 };
327 struct wp_param{
328     uint32_t ref_list_idx;
329 };
330
331 struct brc_param{
332     struct i965_gpe_context * gpe_context_brc_frame_update;
333     struct i965_gpe_context * gpe_context_mbenc;
334 };
335
336 struct mbenc_param{
337     uint32_t frame_width_in_mb;
338     uint32_t frame_height_in_mb;
339     uint32_t mbenc_i_frame_dist_in_use;
340     uint32_t mad_enable;
341     uint32_t roi_enabled;
342     uint32_t brc_enabled;
343     uint32_t slice_height;
344     uint32_t mb_const_data_buffer_in_use;
345     uint32_t mb_qp_buffer_in_use;
346     uint32_t mb_vproc_stats_enable;
347 };
348
349 struct gen9_surface_avc
350 {
351     VADriverContextP ctx;
352     VASurfaceID scaled_4x_surface_id;
353     struct object_surface *scaled_4x_surface_obj;
354     VASurfaceID scaled_16x_surface_id;
355     struct object_surface *scaled_16x_surface_obj;
356     VASurfaceID scaled_32x_surface_id;
357     struct object_surface *scaled_32x_surface_obj;
358
359     //mv code and mv data
360     struct i965_gpe_resource res_mb_code_surface;
361     struct i965_gpe_resource res_mv_data_surface;
362
363     struct i965_gpe_resource res_ref_pic_select_surface;
364     //dmv top/bottom
365     dri_bo *dmv_top;
366     dri_bo *dmv_bottom;
367
368     int dmv_bottom_flag;
369     int frame_store_id;
370     int frame_idx;
371     int is_as_ref;
372     unsigned int qp_value;
373     int top_field_order_cnt;
374 };
375
376 typedef struct _gen9_avc_encoder_kernel_header {
377     int nKernelCount;
378
379     // Quality mode for Frame/Field
380     kernel_header mbenc_quality_I;
381     kernel_header mbenc_quality_P;
382     kernel_header mbenc_quality_B;
383     // Normal mode for Frame/Field
384     kernel_header mbenc_normal_I;
385     kernel_header mbenc_normal_P;
386     kernel_header mbenc_normal_B;
387     // Performance modes for Frame/Field
388     kernel_header mbenc_performance_I;
389     kernel_header mbenc_performance_P;
390     kernel_header mbenc_performance_B;
391     // WiDi modes for Frame/Field
392     kernel_header mbenc_widi_I;
393     kernel_header mbenc_widi_P;
394     kernel_header mbenc_widi_B;
395
396     // HME
397     kernel_header me_p;
398     kernel_header me_b;
399
400     // DownScaling
401     kernel_header ply_dscale_ply;
402     kernel_header ply_dscale_2f_ply_2f;
403
404     // BRC Init frame
405     kernel_header frame_brc_init;
406
407     // FrameBRC Update
408     kernel_header frame_brc_update;
409
410     // BRC Reset frame
411     kernel_header frame_brc_reset;
412
413     // BRC I Frame Distortion
414     kernel_header frame_brc_i_dist;
415
416     // MbBRC Update
417     kernel_header mb_brc_update;
418
419     // 2x DownScaling
420     kernel_header ply_2xdscale_ply;
421     kernel_header ply_2xdscale_2f_ply_2f;
422
423     //Weighted Prediction Kernel
424     kernel_header wp;
425
426     // Static frame detection Kernel
427     kernel_header static_detection;
428 } gen9_avc_encoder_kernel_header;
429
430 /*
431    The definition for Scaling
432 */
433 typedef enum _gen9_avc_binding_table_offset_scaling
434 {
435     GEN9_AVC_SCALING_FRAME_SRC_Y_INDEX                      = 0,
436     GEN9_AVC_SCALING_FRAME_DST_Y_INDEX                      = 1,
437     GEN9_AVC_SCALING_FRAME_MBVPROCSTATS_DST_INDEX           = 4,
438     GEN9_AVC_SCALING_NUM_SURFACES                           = 6
439 } gen9_avc_binding_table_offset_scaling;
440
441 typedef struct _gen9_avc_scaling4x_curbe_data
442 {
443     struct
444     {
445         uint32_t   input_picture_width  :16;
446         uint32_t   input_picture_height :16;
447     } dw0;
448
449     struct {
450         uint32_t   input_y_bti;
451     } dw1;
452
453     struct {
454         uint32_t   output_y_bti;
455     } dw2;
456
457     struct {
458         uint32_t reserved;
459     } dw3;
460
461     struct {
462         uint32_t reserved;
463     } dw4;
464
465     struct {
466         uint32_t flatness_threshold;
467     } dw5;
468
469     struct
470     {
471         uint32_t enable_mb_flatness_check;
472     } dw6;
473
474     struct {
475         uint32_t enable_mb_variance_output;
476     } dw7;
477
478     struct {
479         uint32_t enable_mb_pixel_average_output;
480     } dw8;
481
482     struct {
483         uint32_t reserved;
484     } dw9;
485
486     struct {
487         uint32_t mbv_proc_stat_bti;
488     } dw10;
489
490     struct {
491         uint32_t reserved;
492     } dw11;
493 } gen9_avc_scaling4x_curbe_data;
494
495 typedef struct _gen9_avc_scaling2x_curbe_data
496 {
497     struct
498     {
499         uint32_t   input_picture_width  :16;
500         uint32_t   input_picture_height :16;
501     } dw0;
502
503     /* dw1-dw7 */
504     uint32_t reserved1[7];
505
506     struct {
507         uint32_t input_y_bti;
508     } dw8;
509
510     struct {
511         uint32_t output_y_bti;
512     } dw9;
513
514     uint32_t reserved2[2];
515 } gen9_avc_scaling2x_curbe_data;
516
517 #define GEN9_AVC_KERNEL_SCALING_2X_IDX         0
518 #define GEN9_AVC_KERNEL_SCALING_4X_IDX         1
519 #define NUM_GEN9_AVC_KERNEL_SCALING            2
520
521 struct gen_avc_scaling_context
522 {
523     struct i965_gpe_context gpe_contexts[NUM_GEN9_AVC_KERNEL_SCALING];
524 };
525
526 /*
527 me structure and define
528 */
529 typedef enum _gen9_avc_binding_table_offset_me
530 {
531     GEN9_AVC_ME_MV_DATA_SURFACE_INDEX       = 0,
532     GEN9_AVC_16XME_MV_DATA_SURFACE_INDEX    = 1,
533     GEN9_AVC_32XME_MV_DATA_SURFACE_INDEX    = 1,
534     GEN9_AVC_ME_DISTORTION_SURFACE_INDEX    = 2,
535     GEN9_AVC_ME_BRC_DISTORTION_INDEX        = 3,
536     GEN9_AVC_ME_RESERVED0_INDEX             = 4,
537     GEN9_AVC_ME_CURR_FOR_FWD_REF_INDEX      = 5,
538     GEN9_AVC_ME_FWD_REF_IDX0_INDEX          = 6,
539     GEN9_AVC_ME_RESERVED1_INDEX             = 7,
540     GEN9_AVC_ME_FWD_REF_IDX1_INDEX          = 8,
541     GEN9_AVC_ME_RESERVED2_INDEX             = 9,
542     GEN9_AVC_ME_FWD_REF_IDX2_INDEX          = 10,
543     GEN9_AVC_ME_RESERVED3_INDEX             = 11,
544     GEN9_AVC_ME_FWD_REF_IDX3_INDEX          = 12,
545     GEN9_AVC_ME_RESERVED4_INDEX             = 13,
546     GEN9_AVC_ME_FWD_REF_IDX4_INDEX          = 14,
547     GEN9_AVC_ME_RESERVED5_INDEX             = 15,
548     GEN9_AVC_ME_FWD_REF_IDX5_INDEX          = 16,
549     GEN9_AVC_ME_RESERVED6_INDEX             = 17,
550     GEN9_AVC_ME_FWD_REF_IDX6_INDEX          = 18,
551     GEN9_AVC_ME_RESERVED7_INDEX             = 19,
552     GEN9_AVC_ME_FWD_REF_IDX7_INDEX          = 20,
553     GEN9_AVC_ME_RESERVED8_INDEX             = 21,
554     GEN9_AVC_ME_CURR_FOR_BWD_REF_INDEX      = 22,
555     GEN9_AVC_ME_BWD_REF_IDX0_INDEX          = 23,
556     GEN9_AVC_ME_RESERVED9_INDEX             = 24,
557     GEN9_AVC_ME_BWD_REF_IDX1_INDEX          = 25,
558     GEN9_AVC_ME_VDENC_STREAMIN_INDEX        = 26,
559     GEN9_AVC_ME_NUM_SURFACES_INDEX          = 27
560 } gen9_avc_binding_table_offset_me;
561
562 typedef struct _gen9_avc_me_curbe_data
563 {
564     struct
565     {
566         uint32_t skip_mode_enable:1;
567         uint32_t adaptive_enable:1;
568         uint32_t bi_mix_dis:1;
569         uint32_t reserved0:2;
570         uint32_t early_ime_success_enable:1;
571         uint32_t reserved1:1;
572         uint32_t t8x8_flag_for_inter_enable:1;
573         uint32_t reserved2:16;
574         uint32_t early_ime_stop:8;
575     } dw0;
576
577     struct {
578         uint32_t max_num_mvs:6;
579         uint32_t reserved0:10;
580         uint32_t bi_weight:6;
581         uint32_t reserved1:6;
582         uint32_t uni_mix_disable:1;
583         uint32_t reserved2:3;
584     } dw1;
585
586     struct {
587         uint32_t max_len_sp:8;
588         uint32_t max_num_su:8;
589         uint32_t reserved0:16;
590     } dw2;
591
592     struct {
593         uint32_t src_size:2;
594         uint32_t reserved0:2;
595         uint32_t mb_type_remap:2;
596         uint32_t src_access:1;
597         uint32_t ref_access:1;
598         uint32_t search_ctrl:3;
599         uint32_t dual_search_path_option:1;
600         uint32_t sub_pel_mode:2;
601         uint32_t skip_type:1;
602         uint32_t disable_field_cache_allocation:1;
603         uint32_t inter_chroma_mode:1;
604         uint32_t ft_enable:1;
605         uint32_t bme_disable_fbr:1;
606         uint32_t block_based_skip_enable:1;
607         uint32_t inter_sad:2;
608         uint32_t intra_sad:2;
609         uint32_t sub_mb_part_mask:7;
610         uint32_t reserved1:1;
611     } dw3;
612
613     struct {
614         uint32_t reserved0:8;
615         uint32_t picture_height_minus1:8;
616         uint32_t picture_width:8;
617         uint32_t reserved1:8;
618     } dw4;
619
620     struct {
621         uint32_t reserved0:8;
622         uint32_t qp_prime_y:8;
623         uint32_t ref_width:8;
624         uint32_t ref_height:8;
625     } dw5;
626
627     struct {
628         uint32_t reserved0:3;
629         uint32_t write_distortions:1;
630         uint32_t use_mv_from_prev_step:1;
631         uint32_t reserved1:3;
632         uint32_t super_combine_dist:8;
633         uint32_t max_vmvr:16;
634     } dw6;
635
636     struct {
637         uint32_t reserved0:16;
638         uint32_t mv_cost_scale_factor:2;
639         uint32_t bilinear_enable:1;
640         uint32_t src_field_polarity:1;
641         uint32_t weightedsad_harr:1;
642         uint32_t ac_only_haar:1;
643         uint32_t ref_id_cost_mode:1;
644         uint32_t reserved1:1;
645         uint32_t skip_center_mask:8;
646     } dw7;
647
648     struct {
649         uint32_t mode_0_cost:8;
650         uint32_t mode_1_cost:8;
651         uint32_t mode_2_cost:8;
652         uint32_t mode_3_cost:8;
653     } dw8;
654
655     struct {
656         uint32_t mode_4_cost:8;
657         uint32_t mode_5_cost:8;
658         uint32_t mode_6_cost:8;
659         uint32_t mode_7_cost:8;
660     } dw9;
661
662     struct {
663         uint32_t mode_8_cost:8;
664         uint32_t mode_9_cost:8;
665         uint32_t ref_id_cost:8;
666         uint32_t chroma_intra_mode_cost:8;
667     } dw10;
668
669     struct {
670         uint32_t mv_0_cost:8;
671         uint32_t mv_1_cost:8;
672         uint32_t mv_2_cost:8;
673         uint32_t mv_3_cost:8;
674     } dw11;
675
676     struct {
677         uint32_t mv_4_cost:8;
678         uint32_t mv_5_cost:8;
679         uint32_t mv_6_cost:8;
680         uint32_t mv_7_cost:8;
681     } dw12;
682
683      struct {
684         uint32_t num_ref_idx_l0_minus1:8;
685         uint32_t num_ref_idx_l1_minus1:8;
686         uint32_t ref_streamin_cost:8;
687         uint32_t roi_enable:3;
688         uint32_t reserved0:5;
689     } dw13;
690
691     struct {
692         uint32_t l0_ref_pic_polarity_bits:8;
693         uint32_t l1_ref_pic_polarity_bits:2;
694         uint32_t reserved:22;
695     } dw14;
696
697     struct {
698         uint32_t prev_mv_read_pos_factor : 8;
699         uint32_t mv_shift_factor : 8;
700         uint32_t reserved:16;
701     } dw15;
702
703     struct {
704         struct generic_search_path_delta sp_delta_0;
705         struct generic_search_path_delta sp_delta_1;
706         struct generic_search_path_delta sp_delta_2;
707         struct generic_search_path_delta sp_delta_3;
708     } dw16;
709
710     struct {
711         struct generic_search_path_delta sp_delta_4;
712         struct generic_search_path_delta sp_delta_5;
713         struct generic_search_path_delta sp_delta_6;
714         struct generic_search_path_delta sp_delta_7;
715     } dw17;
716
717     struct {
718         struct generic_search_path_delta sp_delta_8;
719         struct generic_search_path_delta sp_delta_9;
720         struct generic_search_path_delta sp_delta_10;
721         struct generic_search_path_delta sp_delta_11;
722     } dw18;
723
724     struct {
725         struct generic_search_path_delta sp_delta_12;
726         struct generic_search_path_delta sp_delta_13;
727         struct generic_search_path_delta sp_delta_14;
728         struct generic_search_path_delta sp_delta_15;
729     } dw19;
730
731     struct {
732         struct generic_search_path_delta sp_delta_16;
733         struct generic_search_path_delta sp_delta_17;
734         struct generic_search_path_delta sp_delta_18;
735         struct generic_search_path_delta sp_delta_19;
736     } dw20;
737
738     struct {
739         struct generic_search_path_delta sp_delta_20;
740         struct generic_search_path_delta sp_delta_21;
741         struct generic_search_path_delta sp_delta_22;
742         struct generic_search_path_delta sp_delta_23;
743     } dw21;
744
745     struct {
746         struct generic_search_path_delta sp_delta_24;
747         struct generic_search_path_delta sp_delta_25;
748         struct generic_search_path_delta sp_delta_26;
749         struct generic_search_path_delta sp_delta_27;
750     } dw22;
751
752     struct {
753         struct generic_search_path_delta sp_delta_28;
754         struct generic_search_path_delta sp_delta_29;
755         struct generic_search_path_delta sp_delta_30;
756         struct generic_search_path_delta sp_delta_31;
757     } dw23;
758
759     struct {
760         struct generic_search_path_delta sp_delta_32;
761         struct generic_search_path_delta sp_delta_33;
762         struct generic_search_path_delta sp_delta_34;
763         struct generic_search_path_delta sp_delta_35;
764     } dw24;
765
766     struct {
767         struct generic_search_path_delta sp_delta_36;
768         struct generic_search_path_delta sp_delta_37;
769         struct generic_search_path_delta sp_delta_38;
770         struct generic_search_path_delta sp_delta_39;
771     } dw25;
772
773     struct {
774         struct generic_search_path_delta sp_delta_40;
775         struct generic_search_path_delta sp_delta_41;
776         struct generic_search_path_delta sp_delta_42;
777         struct generic_search_path_delta sp_delta_43;
778     } dw26;
779
780     struct {
781         struct generic_search_path_delta sp_delta_44;
782         struct generic_search_path_delta sp_delta_45;
783         struct generic_search_path_delta sp_delta_46;
784         struct generic_search_path_delta sp_delta_47;
785     } dw27;
786
787     struct {
788         struct generic_search_path_delta sp_delta_48;
789         struct generic_search_path_delta sp_delta_49;
790         struct generic_search_path_delta sp_delta_50;
791         struct generic_search_path_delta sp_delta_51;
792     } dw28;
793
794     struct {
795         struct generic_search_path_delta sp_delta_52;
796         struct generic_search_path_delta sp_delta_53;
797         struct generic_search_path_delta sp_delta_54;
798         struct generic_search_path_delta sp_delta_55;
799     } dw29;
800
801     struct {
802         uint32_t actual_mb_width:16;
803         uint32_t actual_mb_height:16;
804     } dw30;
805
806     struct {
807         uint32_t reserved0;
808     } dw31;
809
810     struct {
811         uint32_t _4x_memv_output_data_surf_index;
812     } dw32;
813
814     struct {
815         uint32_t _16x_32x_memv_input_data_surf_index;
816     } dw33;
817
818     struct {
819         uint32_t _4x_me_output_dist_surf_index;
820     } dw34;
821
822     struct {
823         uint32_t _4x_me_output_brc_dist_surf_index;
824     } dw35;
825
826     struct {
827         uint32_t vme_fwd_inter_pred_surf_index;
828     } dw36;
829
830     struct {
831         uint32_t vme_bdw_inter_pred_surf_index;
832     } dw37;
833
834     /* reserved */
835     struct {
836         uint32_t reserved;
837     } dw38;
838 } gen9_avc_me_curbe_data;
839
840 #define GEN9_AVC_KERNEL_ME_P_IDX         0
841 #define GEN9_AVC_KERNEL_ME_B_IDX         1
842 #define NUM_GEN9_AVC_KERNEL_ME           2
843
844 struct gen_avc_me_context
845 {
846     struct i965_gpe_context gpe_contexts[NUM_GEN9_AVC_KERNEL_ME];
847 };
848
849 /*
850 frame/mb brc structure and define
851 */
852 typedef enum _gen9_avc_binding_table_offset_brc_init_reset
853 {
854     GEN9_AVC_BRC_INIT_RESET_HISTORY_INDEX = 0,
855     GEN9_AVC_BRC_INIT_RESET_DISTORTION_INDEX,
856     GEN9_AVC_BRC_INIT_RESET_NUM_SURFACES
857 } gen9_avc_binding_table_offset_brc_init_reset;
858
859 typedef struct _gen9_avc_brc_init_reset_curbe_data
860 {
861     struct
862     {
863         uint32_t profile_level_max_frame;
864     } dw0;
865
866     struct
867     {
868         uint32_t init_buf_full_in_bits;
869     } dw1;
870
871     struct
872     {
873         uint32_t buf_size_in_bits;
874     } dw2;
875
876     struct
877     {
878         uint32_t average_bit_rate;
879     } dw3;
880
881     struct
882     {
883         uint32_t max_bit_rate;
884     } dw4;
885
886     struct
887     {
888         uint32_t min_bit_rate;
889     } dw5;
890
891     struct
892     {
893         uint32_t frame_rate_m;
894     } dw6;
895
896     struct
897     {
898         uint32_t frame_rate_d;
899     } dw7;
900
901     struct
902     {
903         uint32_t brc_flag:16;
904         uint32_t gop_p:16;
905     } dw8;
906
907     struct
908     {
909         uint32_t gop_b:16;
910         uint32_t frame_width_in_bytes:16;
911     } dw9;
912
913     struct
914     {
915         uint32_t frame_height_in_bytes:16;
916         uint32_t avbr_accuracy:16;
917     } dw10;
918
919     struct
920     {
921         uint32_t avbr_convergence:16;
922         uint32_t min_qp:16;
923     } dw11;
924
925     struct
926     {
927         uint32_t max_qp:16;
928         uint32_t no_slices:16;
929     } dw12;
930
931     struct
932     {
933         uint32_t instant_rate_threshold_0_p:8;
934         uint32_t instant_rate_threshold_1_p:8;
935         uint32_t instant_rate_threshold_2_p:8;
936         uint32_t instant_rate_threshold_3_p:8;
937     } dw13;
938
939     struct
940     {
941         uint32_t instant_rate_threshold_0_b:8;
942         uint32_t instant_rate_threshold_1_b:8;
943         uint32_t instant_rate_threshold_2_b:8;
944         uint32_t instant_rate_threshold_3_b:8;
945     } dw14;
946
947     struct
948     {
949         uint32_t instant_rate_threshold_0_i:8;
950         uint32_t instant_rate_threshold_1_i:8;
951         uint32_t instant_rate_threshold_2_i:8;
952         uint32_t instant_rate_threshold_3_i:8;
953     } dw15;
954
955     struct
956     {
957         uint32_t deviation_threshold_0_pand_b:8;
958         uint32_t deviation_threshold_1_pand_b:8;
959         uint32_t deviation_threshold_2_pand_b:8;
960         uint32_t deviation_threshold_3_pand_b:8;
961     } dw16;
962
963     struct
964     {
965         uint32_t deviation_threshold_4_pand_b:8;
966         uint32_t deviation_threshold_5_pand_b:8;
967         uint32_t deviation_threshold_6_pand_b:8;
968         uint32_t deviation_threshold_7_pand_b:8;
969     } dw17;
970
971     struct
972     {
973         uint32_t deviation_threshold_0_vbr:8;
974         uint32_t deviation_threshold_1_vbr:8;
975         uint32_t deviation_threshold_2_vbr:8;
976         uint32_t deviation_threshold_3_vbr:8;
977     } dw18;
978
979     struct
980     {
981         uint32_t deviation_threshold_4_vbr:8;
982         uint32_t deviation_threshold_5_vbr:8;
983         uint32_t deviation_threshold_6_vbr:8;
984         uint32_t deviation_threshold_7_vbr:8;
985     } dw19;
986
987     struct
988     {
989         uint32_t deviation_threshold_0_i:8;
990         uint32_t deviation_threshold_1_i:8;
991         uint32_t deviation_threshold_2_i:8;
992         uint32_t deviation_threshold_3_i:8;
993     } dw20;
994
995     struct
996     {
997         uint32_t deviation_threshold_4_i:8;
998         uint32_t deviation_threshold_5_i:8;
999         uint32_t deviation_threshold_6_i:8;
1000         uint32_t deviation_threshold_7_i:8;
1001     } dw21;
1002
1003     struct
1004     {
1005         uint32_t initial_qp_i:8;
1006         uint32_t initial_qp_p:8;
1007         uint32_t initial_qp_b:8;
1008         uint32_t sliding_window_size:8;
1009     } dw22;
1010
1011     struct
1012     {
1013         uint32_t acqp;
1014     } dw23;
1015
1016 }gen9_avc_brc_init_reset_curbe_data;
1017
1018 typedef enum _gen9_avc_binding_table_offset_frame_brc_update
1019 {
1020     GEN9_AVC_FRAME_BRC_UPDATE_HISTORY_INDEX                = 0,
1021     GEN9_AVC_FRAME_BRC_UPDATE_PAK_STATISTICS_OUTPUT_INDEX  = 1,
1022     GEN9_AVC_FRAME_BRC_UPDATE_IMAGE_STATE_READ_INDEX       = 2,
1023     GEN9_AVC_FRAME_BRC_UPDATE_IMAGE_STATE_WRITE_INDEX      = 3,
1024     GEN9_AVC_FRAME_BRC_UPDATE_MBENC_CURBE_READ_INDEX       = 4,
1025     GEN9_AVC_FRAME_BRC_UPDATE_MBENC_CURBE_WRITE_INDEX      = 5,
1026     GEN9_AVC_FRAME_BRC_UPDATE_DISTORTION_INDEX             = 6,
1027     GEN9_AVC_FRAME_BRC_UPDATE_CONSTANT_DATA_INDEX          = 7,
1028     GEN9_AVC_FRAME_BRC_UPDATE_MB_STATUS_INDEX              = 8,
1029     GEN9_AVC_FRAME_BRC_UPDATE_NUM_SURFACES_INDEX           = 9
1030 } gen9_avc_binding_table_offset_frame_brc_update;
1031
1032 typedef struct _gen9_avc_frame_brc_update_curbe_data
1033 {
1034     struct
1035     {
1036         uint32_t target_size;
1037     } dw0;
1038
1039     struct
1040     {
1041         uint32_t frame_number;
1042     } dw1;
1043
1044     struct
1045     {
1046         uint32_t size_of_pic_headers;
1047     } dw2;
1048
1049     struct
1050     {
1051         uint32_t start_gadj_frame0:16;
1052         uint32_t start_gadj_frame1:16;
1053     } dw3;
1054
1055     struct
1056     {
1057         uint32_t start_gadj_frame2:16;
1058         uint32_t start_gadj_frame3:16;
1059     } dw4;
1060
1061     struct
1062     {
1063         uint32_t target_size_flag:8;
1064         uint32_t brc_flag:8;
1065         uint32_t max_num_paks:8;
1066         uint32_t cur_frame_type:8;
1067     } dw5;
1068
1069     struct
1070     {
1071         uint32_t num_skip_frames:8;
1072         uint32_t minimum_qp:8;
1073         uint32_t maximum_qp:8;
1074         uint32_t enable_force_skip:1;
1075         uint32_t enable_sliding_window:1;
1076         uint32_t reserved:6;
1077     } dw6;
1078
1079     struct
1080     {
1081         uint32_t size_skip_frames;
1082     } dw7;
1083
1084     struct
1085     {
1086         uint32_t start_global_adjust_mult_0:8;
1087         uint32_t start_global_adjust_mult_1:8;
1088         uint32_t start_global_adjust_mult_2:8;
1089         uint32_t start_global_adjust_mult_3:8;
1090     } dw8;
1091
1092     struct
1093     {
1094         uint32_t start_global_adjust_mult_4:8;
1095         uint32_t start_global_adjust_div_0:8;
1096         uint32_t start_global_adjust_div_1:8;
1097         uint32_t start_global_adjust_div_2:8;
1098     } dw9;
1099
1100     struct
1101     {
1102         uint32_t start_global_adjust_div_3:8;
1103         uint32_t start_global_adjust_div_4:8;
1104         uint32_t qp_threshold_0:8;
1105         uint32_t qp_threshold_1:8;
1106     } dw10;
1107
1108     struct
1109     {
1110         uint32_t qp_threshold_2:8;
1111         uint32_t qp_threshold_3:8;
1112         uint32_t g_rate_ratio_threshold_0:8;
1113         uint32_t g_rate_ratio_threshold_1:8;
1114     } dw11;
1115
1116     struct
1117     {
1118         uint32_t g_rate_ratio_threshold_2:8;
1119         uint32_t g_rate_ratio_threshold_3:8;
1120         uint32_t g_rate_ratio_threshold_4:8;
1121         uint32_t g_rate_ratio_threshold_5:8;
1122     } dw12;
1123
1124     struct
1125     {
1126         uint32_t g_rate_ratio_threshold_qp_0:8;
1127         uint32_t g_rate_ratio_threshold_qp_1:8;
1128         uint32_t g_rate_ratio_threshold_qp_2:8;
1129         uint32_t g_rate_ratio_threshold_qp_3:8;
1130     } dw13;
1131
1132     struct
1133     {
1134         uint32_t g_rate_ratio_threshold_qp_4:8;
1135         uint32_t g_rate_ratio_threshold_qp_5:8;
1136         uint32_t g_rate_ratio_threshold_qp_6:8;
1137         uint32_t qp_index_of_cur_pic:8;
1138     } dw14;
1139
1140     struct
1141     {
1142         uint32_t reserved0:8;
1143         uint32_t enable_roi:8;
1144         uint32_t reserved1:8;
1145         uint32_t reserved2:8;
1146     } dw15;
1147
1148     struct
1149     {
1150         uint32_t reserved;
1151     } dw16;
1152
1153     struct
1154     {
1155         uint32_t reserved;
1156     } dw17;
1157
1158     struct
1159     {
1160         uint32_t reserved;
1161     } dw18;
1162
1163     struct
1164     {
1165         uint32_t user_max_frame;
1166     } dw19;
1167
1168     struct
1169     {
1170         uint32_t reserved;
1171     } dw20;
1172
1173     struct
1174     {
1175         uint32_t reserved;
1176     } dw21;
1177
1178     struct
1179     {
1180         uint32_t reserved;
1181     } dw22;
1182
1183     struct
1184     {
1185         uint32_t reserved;
1186     } dw23;
1187
1188 }gen9_avc_frame_brc_update_curbe_data;
1189
1190 typedef enum _gen9_avc_binding_table_offset_mb_brc_update
1191 {
1192     GEN9_AVC_MB_BRC_UPDATE_HISTORY_INDEX               = 0,
1193     GEN9_AVC_MB_BRC_UPDATE_MB_QP_INDEX                 = 1,
1194     GEN9_AVC_MB_BRC_UPDATE_ROI_INDEX                   = 2,
1195     GEN9_AVC_MB_BRC_UPDATE_MB_STATUS_INDEX             = 3,
1196     GEN9_AVC_MB_BRC_UPDATE_NUM_SURFACES_INDEX          = 4
1197 } gen9_avc_binding_table_offset_mb_brc_update;
1198
1199 typedef struct _gen9_avc_mb_brc_curbe_data
1200 {
1201     struct
1202     {
1203         uint32_t cur_frame_type:8;
1204         uint32_t enable_roi:8;
1205         uint32_t roi_ratio:8;
1206         uint32_t reserved0:8;
1207     } dw0;
1208
1209     struct
1210     {
1211         uint32_t reserved;
1212     } dw1;
1213
1214     struct
1215     {
1216         uint32_t reserved;
1217     } dw2;
1218
1219     struct
1220     {
1221         uint32_t reserved;
1222     } dw3;
1223
1224     struct
1225     {
1226         uint32_t reserved;
1227     } dw4;
1228
1229     struct
1230     {
1231         uint32_t reserved;
1232     } dw5;
1233
1234     struct
1235     {
1236         uint32_t reserved;
1237     } dw6;
1238
1239
1240 }gen9_avc_mb_brc_curbe_data;
1241
1242 #define GEN9_AVC_KERNEL_BRC_INIT         0
1243 #define GEN9_AVC_KERNEL_BRC_FRAME_UPDATE 1
1244 #define GEN9_AVC_KERNEL_BRC_RESET        2
1245 #define GEN9_AVC_KERNEL_BRC_I_FRAME_DIST 3
1246 #define GEN9_AVC_KERNEL_BRC_BLOCK_COPY   4
1247 #define GEN9_AVC_KERNEL_BRC_MB_UPDATE    5
1248 #define NUM_GEN9_AVC_KERNEL_BRC          6
1249
1250 struct gen_avc_brc_context
1251 {
1252     struct i965_gpe_context gpe_contexts[NUM_GEN9_AVC_KERNEL_BRC];
1253 };
1254
1255 /*
1256 wp structure and define
1257 */
1258 typedef enum _gen9_avc_binding_table_offset_wp
1259 {
1260     GEN9_AVC_WP_INPUT_REF_SURFACE_INDEX                 = 0,
1261     GEN9_AVC_WP_OUTPUT_SCALED_SURFACE_INDEX             = 1,
1262     GEN9_AVC_WP_NUM_SURFACES_INDEX                      = 2
1263 } gen9_avc_binding_table_offset_wp;
1264
1265 typedef struct _gen9_avc_wp_curbe_data
1266 {
1267     struct
1268     {
1269         uint32_t default_weight:16;
1270         uint32_t default_offset:16;
1271     } dw0;
1272
1273     struct
1274     {
1275         uint32_t roi_0_x_left:16;
1276         uint32_t roi_0_y_top:16;
1277     } dw1;
1278
1279     struct
1280     {
1281         uint32_t roi_0_x_right:16;
1282         uint32_t roi_0_y_bottom:16;
1283     } dw2;
1284
1285     struct
1286     {
1287         uint32_t roi_0_weight:16;
1288         uint32_t roi_0_offset:16;
1289     } dw3;
1290
1291     struct
1292     {
1293         uint32_t roi_1_x_left:16;
1294         uint32_t roi_1_y_top:16;
1295     } dw4;
1296
1297     struct
1298     {
1299         uint32_t roi_1_x_right:16;
1300         uint32_t roi_1_y_bottom:16;
1301     } dw5;
1302
1303     struct
1304     {
1305         uint32_t roi_1_weight:16;
1306         uint32_t roi_1_offset:16;
1307     } dw6;
1308
1309     struct
1310     {
1311         uint32_t roi_2_x_left:16;
1312         uint32_t roi_2_y_top:16;
1313     } dw7;
1314
1315     struct
1316     {
1317         uint32_t roi_2_x_right:16;
1318         uint32_t roi_2_y_bottom:16;
1319     } dw8;
1320
1321     struct
1322     {
1323         uint32_t roi_2_weight:16;
1324         uint32_t roi_2_offset:16;
1325     } dw9;
1326
1327     struct
1328     {
1329         uint32_t roi_3_x_left:16;
1330         uint32_t roi_3_y_top:16;
1331     } dw10;
1332
1333     struct
1334     {
1335         uint32_t roi_3_x_right:16;
1336         uint32_t roi_3_y_bottom:16;
1337     } dw11;
1338
1339     struct
1340     {
1341         uint32_t roi_3_weight:16;
1342         uint32_t roi_3_offset:16;
1343     } dw12;
1344
1345     struct
1346     {
1347         uint32_t roi_4_x_left:16;
1348         uint32_t roi_4_y_top:16;
1349     } dw13;
1350
1351     struct
1352     {
1353         uint32_t roi_4_x_right:16;
1354         uint32_t roi_4_y_bottom:16;
1355     } dw14;
1356
1357     struct
1358     {
1359         uint32_t roi_4_weight:16;
1360         uint32_t roi_4_offset:16;
1361     } dw15;
1362
1363     struct
1364     {
1365         uint32_t roi_5_x_left:16;
1366         uint32_t roi_5_y_top:16;
1367     } dw16;
1368
1369     struct
1370     {
1371         uint32_t roi_5_x_right:16;
1372         uint32_t roi_5_y_bottom:16;
1373     } dw17;
1374
1375     struct
1376     {
1377         uint32_t roi_5_weight:16;
1378         uint32_t roi_5_offset:16;
1379     } dw18;
1380
1381     struct
1382     {
1383         uint32_t roi_6_x_left:16;
1384         uint32_t roi_6_y_top:16;
1385     } dw19;
1386
1387     struct
1388     {
1389         uint32_t roi_6_x_right:16;
1390         uint32_t roi_6_y_bottom:16;
1391     } dw20;
1392
1393     struct
1394     {
1395         uint32_t roi_6_weight:16;
1396         uint32_t roi_6_offset:16;
1397     } dw21;
1398
1399     struct
1400     {
1401         uint32_t roi_7_x_left:16;
1402         uint32_t roi_7_y_top:16;
1403     } dw22;
1404
1405     struct
1406     {
1407         uint32_t roi_7_x_right:16;
1408         uint32_t roi_7_y_bottom:16;
1409     } dw23;
1410
1411     struct
1412     {
1413         uint32_t roi_7_weight:16;
1414         uint32_t roi_7_offset:16;
1415     } dw24;
1416
1417     struct
1418     {
1419         uint32_t roi_8_x_left:16;
1420         uint32_t roi_8_y_top:16;
1421     } dw25;
1422
1423     struct
1424     {
1425         uint32_t roi_8_x_right:16;
1426         uint32_t roi_8_y_bottom:16;
1427     } dw26;
1428
1429     struct
1430     {
1431         uint32_t roi_8_weight:16;
1432         uint32_t roi_8_offset:16;
1433     } dw27;
1434
1435     struct
1436     {
1437         uint32_t roi_9_x_left:16;
1438         uint32_t roi_9_y_top:16;
1439     } dw28;
1440
1441     struct
1442     {
1443         uint32_t roi_9_x_right:16;
1444         uint32_t roi_9_y_bottom:16;
1445     } dw29;
1446
1447     struct
1448     {
1449         uint32_t roi_9_weight:16;
1450         uint32_t roi_9_offset:16;
1451     } dw30;
1452
1453     struct
1454     {
1455         uint32_t roi_10_x_left:16;
1456         uint32_t roi_10_y_top:16;
1457     } dw31;
1458
1459     struct
1460     {
1461         uint32_t roi_10_x_right:16;
1462         uint32_t roi_10_y_bottom:16;
1463     } dw32;
1464
1465     struct
1466     {
1467         uint32_t roi_10_weight:16;
1468         uint32_t roi_10_offset:16;
1469     } dw33;
1470
1471     struct
1472     {
1473         uint32_t roi_11_x_left:16;
1474         uint32_t roi_11_y_top:16;
1475     } dw34;
1476
1477     struct
1478     {
1479         uint32_t roi_11_x_right:16;
1480         uint32_t roi_11_y_bottom:16;
1481     } dw35;
1482
1483     struct
1484     {
1485         uint32_t roi_11_weight:16;
1486         uint32_t roi_11_offset:16;
1487     } dw36;
1488
1489     struct
1490     {
1491         uint32_t roi_12_x_left:16;
1492         uint32_t roi_12_y_top:16;
1493     } dw37;
1494
1495     struct
1496     {
1497         uint32_t roi_12_x_right:16;
1498         uint32_t roi_12_y_bottom:16;
1499     } dw38;
1500
1501     struct
1502     {
1503         uint32_t roi_12_weight:16;
1504         uint32_t roi_12_offset:16;
1505     } dw39;
1506
1507     struct
1508     {
1509         uint32_t roi_13_x_left:16;
1510         uint32_t roi_13_y_top:16;
1511     } dw40;
1512
1513     struct
1514     {
1515         uint32_t roi_13_x_right:16;
1516         uint32_t roi_13_y_bottom:16;
1517     } dw41;
1518
1519     struct
1520     {
1521         uint32_t roi_13_weight:16;
1522         uint32_t roi_13_offset:16;
1523     } dw42;
1524
1525     struct
1526     {
1527         uint32_t roi_14_x_left:16;
1528         uint32_t roi_14_y_top:16;
1529     } dw43;
1530
1531     struct
1532     {
1533         uint32_t roi_14_x_right:16;
1534         uint32_t roi_14_y_bottom:16;
1535     } dw44;
1536
1537     struct
1538     {
1539         uint32_t roi_14_weight:16;
1540         uint32_t roi_14_offset:16;
1541     } dw45;
1542
1543     struct
1544     {
1545         uint32_t roi_15_x_left:16;
1546         uint32_t roi_15_y_top:16;
1547     } dw46;
1548
1549     struct
1550     {
1551         uint32_t roi_15_x_right:16;
1552         uint32_t roi_15_y_bottom:16;
1553     } dw47;
1554
1555     struct
1556     {
1557         uint32_t roi_15_weight:16;
1558         uint32_t roi_15_offset:16;
1559     } dw48;
1560
1561     struct
1562     {
1563         uint32_t input_surface;
1564     } dw49;
1565
1566     struct
1567     {
1568         uint32_t output_surface;
1569     } dw50;
1570
1571
1572
1573 }gen9_avc_wp_curbe_data;
1574
1575 struct gen_avc_wp_context
1576 {
1577     struct i965_gpe_context gpe_contexts;
1578 };
1579
1580 /*
1581 mbenc structure and define
1582 */
1583 typedef enum _gen9_avc_binding_table_offset_mbenc
1584 {
1585     GEN9_AVC_MBENC_MFC_AVC_PAK_OBJ_INDEX                    =  0,
1586     GEN9_AVC_MBENC_IND_MV_DATA_INDEX                        =  1,
1587     GEN9_AVC_MBENC_BRC_DISTORTION_INDEX                     =  2,    // FOR BRC DISTORTION FOR I
1588     GEN9_AVC_MBENC_CURR_Y_INDEX                             =  3,
1589     GEN9_AVC_MBENC_CURR_UV_INDEX                            =  4,
1590     GEN9_AVC_MBENC_MB_SPECIFIC_DATA_INDEX                   =  5,
1591     GEN9_AVC_MBENC_AUX_VME_OUT_INDEX                        =  6,
1592     GEN9_AVC_MBENC_REFPICSELECT_L0_INDEX                    =  7,
1593     GEN9_AVC_MBENC_MV_DATA_FROM_ME_INDEX                    =  8,
1594     GEN9_AVC_MBENC_4XME_DISTORTION_INDEX                    =  9,
1595     GEN9_AVC_MBENC_SLICEMAP_DATA_INDEX                      = 10,
1596     GEN9_AVC_MBENC_FWD_MB_DATA_INDEX                        = 11,
1597     GEN9_AVC_MBENC_FWD_MV_DATA_INDEX                        = 12,
1598     GEN9_AVC_MBENC_MBQP_INDEX                               = 13,
1599     GEN9_AVC_MBENC_MBBRC_CONST_DATA_INDEX                   = 14,
1600     GEN9_AVC_MBENC_VME_INTER_PRED_CURR_PIC_IDX_0_INDEX      = 15,
1601     GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX0_INDEX        = 16,
1602     GEN9_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX0_0_INDEX      = 17,
1603     GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX1_INDEX        = 18,
1604     GEN9_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX1_0_INDEX      = 19,
1605     GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX2_INDEX        = 20,
1606     GEN9_AVC_MBENC_RESERVED0_INDEX                          = 21,
1607     GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX3_INDEX        = 22,
1608     GEN9_AVC_MBENC_RESERVED1_INDEX                          = 23,
1609     GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX4_INDEX        = 24,
1610     GEN9_AVC_MBENC_RESERVED2_INDEX                          = 25,
1611     GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX5_INDEX        = 26,
1612     GEN9_AVC_MBENC_RESERVED3_INDEX                          = 27,
1613     GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX6_INDEX        = 28,
1614     GEN9_AVC_MBENC_RESERVED4_INDEX                          = 29,
1615     GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX7_INDEX        = 30,
1616     GEN9_AVC_MBENC_RESERVED5_INDEX                          = 31,
1617     GEN9_AVC_MBENC_VME_INTER_PRED_CURR_PIC_IDX_1_INDEX      = 32,
1618     GEN9_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX0_1_INDEX      = 33,
1619     GEN9_AVC_MBENC_RESERVED6_INDEX                          = 34,
1620     GEN9_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX1_1_INDEX      = 35,
1621     GEN9_AVC_MBENC_RESERVED7_INDEX                          = 36,
1622     GEN9_AVC_MBENC_MB_STATS_INDEX                           = 37,
1623     GEN9_AVC_MBENC_MAD_DATA_INDEX                           = 38,
1624     GEN9_AVC_MBENC_FORCE_NONSKIP_MB_MAP_INDEX               = 39,
1625     GEN9_AVC_MBENC_WIDI_WA_INDEX                            = 40,
1626     GEN9_AVC_MBENC_BRC_CURBE_DATA_INDEX                     = 41,
1627     GEN9_AVC_MBENC_SFD_COST_TABLE_INDEX                     = 42,
1628     GEN9_AVC_MBENC_MV_PREDICTOR_INDEX                       = 43,
1629     GEN9_AVC_MBENC_NUM_SURFACES_INDEX                       = 44
1630 } gen9_avc_binding_table_offset_mbenc;
1631
1632 typedef struct _gen9_avc_mbenc_curbe_data
1633 {
1634     struct
1635     {
1636         uint32_t skip_mode_enable:1;
1637         uint32_t adaptive_enable:1;
1638         uint32_t bi_mix_dis:1;
1639         uint32_t reserved0:2;
1640         uint32_t early_ime_success_enable:1;
1641         uint32_t reserved1:1;
1642         uint32_t t8x8_flag_for_inter_enable:1;
1643         uint32_t reserved2:16;
1644         uint32_t early_ime_stop:8;
1645     } dw0;
1646
1647     struct {
1648         uint32_t max_num_mvs:6;
1649         uint32_t reserved0:10;
1650         uint32_t bi_weight:6;
1651         uint32_t reserved1:6;
1652         uint32_t uni_mix_disable:1;
1653         uint32_t reserved2:3;
1654     } dw1;
1655
1656     struct {
1657         uint32_t max_len_sp:8;
1658         uint32_t max_num_su:8;
1659         uint32_t pitch_width:16;
1660     } dw2;
1661
1662     struct {
1663         uint32_t src_size:2;
1664         uint32_t reserved0:2;
1665         uint32_t mb_type_remap:2;
1666         uint32_t src_access:1;
1667         uint32_t ref_access:1;
1668         uint32_t search_ctrl:3;
1669         uint32_t dual_search_path_option:1;
1670         uint32_t sub_pel_mode:2;
1671         uint32_t skip_type:1;
1672         uint32_t disable_field_cache_allocation:1;
1673         uint32_t inter_chroma_mode:1;
1674         uint32_t ftq_enable:1;
1675         uint32_t bme_disable_fbr:1;
1676         uint32_t block_based_skip_enable:1;
1677         uint32_t inter_sad:2;
1678         uint32_t intra_sad:2;
1679         uint32_t sub_mb_part_mask:7;
1680         uint32_t reserved1:1;
1681     } dw3;
1682
1683     struct {
1684         uint32_t picture_height_minus1:16;
1685         uint32_t mv_restriction_in_slice_enable:1;
1686         uint32_t delta_mv_enable:1;
1687         uint32_t true_distortion_enable:1;
1688         uint32_t enable_wavefront_optimization:1;
1689         uint32_t enable_fbr_bypass:1;
1690         uint32_t enable_intra_cost_scaling_for_static_frame:1;
1691         uint32_t reserved0:1;
1692         uint32_t enable_widi_wa_surf:1;
1693         uint32_t enable_widi_dirty_rect:1;
1694         uint32_t enable_cur_fld_idr:1;
1695         uint32_t contrained_intra_pred_flag:1;
1696         uint32_t field_parity_flag:1;
1697         uint32_t hme_enable:1;
1698         uint32_t picture_type:2;
1699         uint32_t use_actual_ref_qp_value:1;
1700     } dw4;
1701
1702     struct {
1703         uint32_t slice_mb_height:16;
1704         uint32_t ref_width:8;
1705         uint32_t ref_height:8;
1706     } dw5;
1707
1708     struct {
1709         uint32_t batch_buffer_end;
1710     } dw6;
1711
1712     struct {
1713         uint32_t intra_part_mask:5;
1714         uint32_t non_skip_zmv_added:1;
1715         uint32_t non_skip_mode_added:1;
1716         uint32_t luma_intra_src_corner_swap:1;
1717         uint32_t reserved0:8;
1718         uint32_t mv_cost_scale_factor:2;
1719         uint32_t bilinear_enable:1;
1720         uint32_t src_field_polarity:1;
1721         uint32_t weightedsad_harr:1;
1722         uint32_t ac_only_haar:1;
1723         uint32_t ref_id_cost_mode:1;
1724         uint32_t reserved1:1;
1725         uint32_t skip_center_mask:8;
1726     } dw7;
1727
1728     struct {
1729         uint32_t mode_0_cost:8;
1730         uint32_t mode_1_cost:8;
1731         uint32_t mode_2_cost:8;
1732         uint32_t mode_3_cost:8;
1733     } dw8;
1734
1735     struct {
1736         uint32_t mode_4_cost:8;
1737         uint32_t mode_5_cost:8;
1738         uint32_t mode_6_cost:8;
1739         uint32_t mode_7_cost:8;
1740     } dw9;
1741
1742     struct {
1743         uint32_t mode_8_cost:8;
1744         uint32_t mode_9_cost:8;
1745         uint32_t ref_id_cost:8;
1746         uint32_t chroma_intra_mode_cost:8;
1747     } dw10;
1748
1749     union{
1750         struct {
1751             uint32_t mv_0_cost:8;
1752             uint32_t mv_1_cost:8;
1753             uint32_t mv_2_cost:8;
1754             uint32_t mv_3_cost:8;
1755         };
1756         uint32_t value;
1757     }dw11;
1758
1759     struct {
1760         uint32_t mv_4_cost:8;
1761         uint32_t mv_5_cost:8;
1762         uint32_t mv_6_cost:8;
1763         uint32_t mv_7_cost:8;
1764     } dw12;
1765
1766     struct {
1767         uint32_t qp_prime_y:8;
1768         uint32_t qp_prime_cb:8;
1769         uint32_t qp_prime_cr:8;
1770         uint32_t target_size_in_word:8;
1771     } dw13;
1772
1773     struct {
1774         uint32_t sic_fwd_transcoeff_threshold_0:16;
1775         uint32_t sic_fwd_transcoeff_threshold_1:8;
1776         uint32_t sic_fwd_transcoeff_threshold_2:8;
1777     } dw14;
1778
1779     struct {
1780         uint32_t sic_fwd_transcoeff_threshold_3:8;
1781         uint32_t sic_fwd_transcoeff_threshold_4:8;
1782         uint32_t sic_fwd_transcoeff_threshold_5:8;
1783         uint32_t sic_fwd_transcoeff_threshold_6:8;
1784     } dw15;
1785
1786     struct {
1787         struct generic_search_path_delta sp_delta_0;
1788         struct generic_search_path_delta sp_delta_1;
1789         struct generic_search_path_delta sp_delta_2;
1790         struct generic_search_path_delta sp_delta_3;
1791     } dw16;
1792
1793     struct {
1794         struct generic_search_path_delta sp_delta_4;
1795         struct generic_search_path_delta sp_delta_5;
1796         struct generic_search_path_delta sp_delta_6;
1797         struct generic_search_path_delta sp_delta_7;
1798     } dw17;
1799
1800     struct {
1801         struct generic_search_path_delta sp_delta_8;
1802         struct generic_search_path_delta sp_delta_9;
1803         struct generic_search_path_delta sp_delta_10;
1804         struct generic_search_path_delta sp_delta_11;
1805     } dw18;
1806
1807     struct {
1808         struct generic_search_path_delta sp_delta_12;
1809         struct generic_search_path_delta sp_delta_13;
1810         struct generic_search_path_delta sp_delta_14;
1811         struct generic_search_path_delta sp_delta_15;
1812     } dw19;
1813
1814     struct {
1815         struct generic_search_path_delta sp_delta_16;
1816         struct generic_search_path_delta sp_delta_17;
1817         struct generic_search_path_delta sp_delta_18;
1818         struct generic_search_path_delta sp_delta_19;
1819     } dw20;
1820
1821     struct {
1822         struct generic_search_path_delta sp_delta_20;
1823         struct generic_search_path_delta sp_delta_21;
1824         struct generic_search_path_delta sp_delta_22;
1825         struct generic_search_path_delta sp_delta_23;
1826     } dw21;
1827
1828     struct {
1829         struct generic_search_path_delta sp_delta_24;
1830         struct generic_search_path_delta sp_delta_25;
1831         struct generic_search_path_delta sp_delta_26;
1832         struct generic_search_path_delta sp_delta_27;
1833     } dw22;
1834
1835     struct {
1836         struct generic_search_path_delta sp_delta_28;
1837         struct generic_search_path_delta sp_delta_29;
1838         struct generic_search_path_delta sp_delta_30;
1839         struct generic_search_path_delta sp_delta_31;
1840     } dw23;
1841
1842     struct {
1843         struct generic_search_path_delta sp_delta_32;
1844         struct generic_search_path_delta sp_delta_33;
1845         struct generic_search_path_delta sp_delta_34;
1846         struct generic_search_path_delta sp_delta_35;
1847     } dw24;
1848
1849     struct {
1850         struct generic_search_path_delta sp_delta_36;
1851         struct generic_search_path_delta sp_delta_37;
1852         struct generic_search_path_delta sp_delta_38;
1853         struct generic_search_path_delta sp_delta_39;
1854     } dw25;
1855
1856     struct {
1857         struct generic_search_path_delta sp_delta_40;
1858         struct generic_search_path_delta sp_delta_41;
1859         struct generic_search_path_delta sp_delta_42;
1860         struct generic_search_path_delta sp_delta_43;
1861     } dw26;
1862
1863     struct {
1864         struct generic_search_path_delta sp_delta_44;
1865         struct generic_search_path_delta sp_delta_45;
1866         struct generic_search_path_delta sp_delta_46;
1867         struct generic_search_path_delta sp_delta_47;
1868     } dw27;
1869
1870     struct {
1871         struct generic_search_path_delta sp_delta_48;
1872         struct generic_search_path_delta sp_delta_49;
1873         struct generic_search_path_delta sp_delta_50;
1874         struct generic_search_path_delta sp_delta_51;
1875     } dw28;
1876
1877     struct {
1878         struct generic_search_path_delta sp_delta_52;
1879         struct generic_search_path_delta sp_delta_53;
1880         struct generic_search_path_delta sp_delta_54;
1881         struct generic_search_path_delta sp_delta_55;
1882     } dw29;
1883
1884     struct {
1885         uint32_t intra_4x4_mode_mask:9;
1886         uint32_t reserved0:7;
1887         uint32_t intra_8x8_mode_mask:9;
1888         uint32_t reserved1:7;
1889     } dw30;
1890
1891     struct {
1892         uint32_t intra_16x16_mode_mask:4;
1893         uint32_t intra_chroma_mode_mask:4;
1894         uint32_t intra_compute_type:2;
1895         uint32_t reserved0:22;
1896     } dw31;
1897
1898     struct {
1899         uint32_t skip_val:16;
1900         uint32_t mult_pred_l0_disable:8;
1901         uint32_t mult_pred_l1_disable:8;
1902     } dw32;
1903
1904     struct {
1905         uint32_t intra_16x16_nondc_penalty:8;
1906         uint32_t intra_8x8_nondc_penalty:8;
1907         uint32_t intra_4x4_nondc_penalty:8;
1908         uint32_t reserved0:8;
1909     } dw33;
1910
1911     struct {
1912         uint32_t list0_ref_id0_field_parity:1;
1913         uint32_t list0_ref_id1_field_parity:1;
1914         uint32_t list0_ref_id2_field_parity:1;
1915         uint32_t list0_ref_id3_field_parity:1;
1916         uint32_t list0_ref_id4_field_parity:1;
1917         uint32_t list0_ref_id5_field_parity:1;
1918         uint32_t list0_ref_id6_field_parity:1;
1919         uint32_t list0_ref_id7_field_parity:1;
1920         uint32_t list1_ref_id0_frm_field_parity:1;
1921         uint32_t list1_ref_id1_frm_field_parity:1;
1922         uint32_t widi_intra_refresh_en:2;
1923         uint32_t arbitray_num_mbs_per_slice:1;
1924         uint32_t enable_adaptive_tx_decision:1;
1925         uint32_t force_non_skip_check:1;
1926         uint32_t disable_enc_skip_check:1;
1927         uint32_t enable_direct_bias_adjustment:1;
1928         uint32_t b_force_to_skip:1;
1929         uint32_t enable_global_motion_bias_adjustment:1;
1930         uint32_t enable_adaptive_search_window_size:1;
1931         uint32_t enable_per_mb_static_check:1;
1932         uint32_t reserved0:3;
1933         uint32_t list1_ref_id0_field_parity:1;
1934         uint32_t list1_ref_id1_field_parity:1;
1935         uint32_t mad_enable_falg:1;
1936         uint32_t roi_enable_flag:1;
1937         uint32_t enable_mb_flatness_check_optimization:1;
1938         uint32_t b_direct_mode:1;
1939         uint32_t mb_brc_enable:1;
1940         uint32_t b_original_bff:1;
1941     } dw34;
1942
1943     struct {
1944         uint32_t panic_mode_mb_threshold:16;
1945         uint32_t small_mb_size_in_word:8;
1946         uint32_t large_mb_size_in_word:8;
1947     } dw35;
1948
1949     struct {
1950         uint32_t num_ref_idx_l0_minus_one:8;
1951         uint32_t hme_combined_extra_sus:8;
1952         uint32_t num_ref_idx_l1_minus_one:8;
1953         uint32_t reserved0:4;
1954         uint32_t is_fwd_frame_short_term_ref:1;
1955         uint32_t check_all_fractional_enable:1;
1956         uint32_t hme_combine_overlap:2;
1957     } dw36;
1958
1959     struct {
1960         uint32_t skip_mode_enable:1;
1961         uint32_t adaptive_enable:1;
1962         uint32_t bi_mix_dis:1;
1963         uint32_t reserved0:2;
1964         uint32_t early_ime_success_enable:1;
1965         uint32_t reserved1:1;
1966         uint32_t t8x8_flag_for_inter_enable:1;
1967         uint32_t reserved2:16;
1968         uint32_t early_ime_stop:8;
1969     } dw37;
1970
1971     /* reserved */
1972     struct {
1973         uint32_t max_len_sp:8;
1974         uint32_t max_num_su:8;
1975         uint32_t ref_threshold:16;
1976     } dw38;
1977
1978     struct {
1979         uint32_t reserved0:8;
1980         uint32_t hme_ref_windows_comb_threshold:8;
1981         uint32_t ref_width:8;
1982         uint32_t ref_height:8;
1983     } dw39;
1984
1985     struct {
1986         uint32_t dist_scale_factor_ref_id0_list0:16;
1987         uint32_t dist_scale_factor_ref_id1_list0:16;
1988     } dw40;
1989
1990     struct {
1991         uint32_t dist_scale_factor_ref_id2_list0:16;
1992         uint32_t dist_scale_factor_ref_id3_list0:16;
1993     } dw41;
1994
1995     struct {
1996         uint32_t dist_scale_factor_ref_id4_list0:16;
1997         uint32_t dist_scale_factor_ref_id5_list0:16;
1998     } dw42;
1999
2000     struct {
2001         uint32_t dist_scale_factor_ref_id6_list0:16;
2002         uint32_t dist_scale_factor_ref_id7_list0:16;
2003     } dw43;
2004
2005     struct {
2006         uint32_t actual_qp_value_for_ref_id0_list0:8;
2007         uint32_t actual_qp_value_for_ref_id1_list0:8;
2008         uint32_t actual_qp_value_for_ref_id2_list0:8;
2009         uint32_t actual_qp_value_for_ref_id3_list0:8;
2010     } dw44;
2011
2012     struct {
2013         uint32_t actual_qp_value_for_ref_id4_list0:8;
2014         uint32_t actual_qp_value_for_ref_id5_list0:8;
2015         uint32_t actual_qp_value_for_ref_id6_list0:8;
2016         uint32_t actual_qp_value_for_ref_id7_list0:8;
2017     } dw45;
2018
2019     struct {
2020         uint32_t actual_qp_value_for_ref_id0_list1:8;
2021         uint32_t actual_qp_value_for_ref_id1_list1:8;
2022         uint32_t ref_cost:16;
2023     } dw46;
2024
2025     struct {
2026         uint32_t mb_qp_read_factor:8;
2027         uint32_t intra_cost_sf:8;
2028         uint32_t max_vmv_r:16;
2029     } dw47;
2030
2031     struct {
2032         uint32_t widi_intra_refresh_mb_num:16;
2033         uint32_t widi_intra_refresh_unit_in_mb_minus1:8;
2034         uint32_t widi_intra_refresh_qp_delta:8;
2035     } dw48;
2036
2037     struct {
2038         uint32_t roi_1_x_left:16;
2039         uint32_t roi_1_y_top:16;
2040     } dw49;
2041
2042     struct {
2043         uint32_t roi_1_x_right:16;
2044         uint32_t roi_1_y_bottom:16;
2045     } dw50;
2046
2047     struct {
2048         uint32_t roi_2_x_left:16;
2049         uint32_t roi_2_y_top:16;
2050     } dw51;
2051
2052     struct {
2053         uint32_t roi_2_x_right:16;
2054         uint32_t roi_2_y_bottom:16;
2055     } dw52;
2056
2057     struct {
2058         uint32_t roi_3_x_left:16;
2059         uint32_t roi_3_y_top:16;
2060     } dw53;
2061
2062     struct {
2063         uint32_t roi_3_x_right:16;
2064         uint32_t roi_3_y_bottom:16;
2065     } dw54;
2066
2067     struct {
2068         uint32_t roi_4_x_left:16;
2069         uint32_t roi_4_y_top:16;
2070     } dw55;
2071
2072     struct {
2073         uint32_t roi_4_x_right:16;
2074         uint32_t roi_4_y_bottom:16;
2075     } dw56;
2076
2077     struct {
2078         uint32_t roi_1_dqp_prime_y:8;
2079         uint32_t roi_2_dqp_prime_y:8;
2080         uint32_t roi_3_dqp_prime_y:8;
2081         uint32_t roi_4_dqp_prime_y:8;
2082     } dw57;
2083
2084     struct {
2085         uint32_t mb_texture_threshold:16;
2086         uint32_t tx_decision_threshold:16;
2087     } dw58;
2088
2089     struct {
2090         uint32_t hme_mv_cost_scaling_factor:8;
2091         uint32_t reserved0:24;
2092     } dw59;
2093
2094     struct {
2095         uint32_t reserved;
2096     } dw60;
2097
2098     struct {
2099         uint32_t reserved;
2100     } dw61;
2101
2102     struct {
2103         uint32_t reserved;
2104     } dw62;
2105
2106     struct {
2107         uint32_t reserved;
2108     } dw63;
2109
2110     struct {
2111         uint32_t mb_data_surf_index;
2112     } dw64;
2113
2114     struct {
2115         uint32_t mv_data_surf_index;
2116     } dw65;
2117
2118     struct {
2119         uint32_t i_dist_surf_index;
2120     } dw66;
2121
2122     struct {
2123         uint32_t src_y_surf_index;
2124     } dw67;
2125
2126     struct {
2127         uint32_t mb_specific_data_surf_index;
2128     } dw68;
2129
2130     struct {
2131         uint32_t aux_vme_out_surf_index;
2132     } dw69;
2133
2134     struct {
2135         uint32_t curr_ref_pic_sel_surf_index;
2136     } dw70;
2137
2138     struct {
2139         uint32_t hme_mv_pred_fwd_bwd_surf_index;
2140     } dw71;
2141
2142     struct {
2143         uint32_t hme_dist_surf_index;
2144     } dw72;
2145
2146     struct {
2147         uint32_t slice_map_surf_index;
2148     } dw73;
2149
2150     struct {
2151         uint32_t fwd_frm_mb_data_surf_index;
2152     } dw74;
2153
2154     struct {
2155         uint32_t fwd_frm_mv_surf_index;
2156     } dw75;
2157
2158     struct {
2159         uint32_t mb_qp_buffer;
2160     } dw76;
2161
2162     struct {
2163         uint32_t mb_brc_lut;
2164     } dw77;
2165
2166     struct {
2167         uint32_t vme_inter_prediction_surf_index;
2168     } dw78;
2169
2170     struct {
2171         uint32_t vme_inter_prediction_mr_surf_index;
2172     } dw79;
2173
2174     struct {
2175         uint32_t mb_stats_surf_index;
2176     } dw80;
2177
2178     struct {
2179         uint32_t mad_surf_index;
2180     } dw81;
2181
2182     struct {
2183         uint32_t force_non_skip_mb_map_surface;
2184     } dw82;
2185
2186     struct {
2187         uint32_t widi_wa_surf_index;
2188     } dw83;
2189
2190     struct {
2191         uint32_t brc_curbe_surf_index;
2192     } dw84;
2193
2194     struct {
2195         uint32_t static_detection_cost_table_index;
2196     } dw85;
2197
2198     struct {
2199         uint32_t reserved0;
2200     } dw86;
2201
2202     struct {
2203         uint32_t reserved0;
2204     } dw87;
2205
2206 } gen9_avc_mbenc_curbe_data;
2207
2208 #define GEN9_AVC_KERNEL_MBENC_QUALITY_I            0
2209 #define GEN9_AVC_KERNEL_MBENC_QUALITY_P            1
2210 #define GEN9_AVC_KERNEL_MBENC_QUALITY_B            2
2211 #define GEN9_AVC_KERNEL_MBENC_NORMAL_I             3
2212 #define GEN9_AVC_KERNEL_MBENC_NORMAL_P             4
2213 #define GEN9_AVC_KERNEL_MBENC_NORMAL_B             5
2214 #define GEN9_AVC_KERNEL_MBENC_PERFORMANCE_I        6
2215 #define GEN9_AVC_KERNEL_MBENC_PERFORMANCE_P        7
2216 #define GEN9_AVC_KERNEL_MBENC_PERFORMANCE_B        8
2217 #define NUM_GEN9_AVC_KERNEL_MBENC                  9
2218
2219 struct gen_avc_mbenc_context
2220 {
2221     struct i965_gpe_context gpe_contexts[NUM_GEN9_AVC_KERNEL_MBENC];
2222 };
2223
2224 /*
2225 static frame detection structure and define
2226 */
2227 typedef enum _gen9_avc_binding_table_offset_sfd
2228 {
2229     GEN9_AVC_SFD_VDENC_INPUT_IMAGE_STATE_INDEX                 =  0,
2230     GEN9_AVC_SFD_MV_DATA_SURFACE_INDEX                         =  1,
2231     GEN9_AVC_SFD_INTER_DISTORTION_SURFACE_INDEX                =  2,
2232     GEN9_AVC_SFD_OUTPUT_DATA_SURFACE_INDEX                     =  3,
2233     GEN9_AVC_SFD_VDENC_OUTPUT_IMAGE_STATE_INDEX                =  4,
2234     GEN9_AVC_SFD_NUM_SURFACES                                  =  5
2235 } gen9_avc_binding_table_offset_sfd;
2236
2237 typedef struct _gen9_avc_sfd_curbe_data
2238 {
2239     struct
2240     {
2241         uint32_t vdenc_mode_disable:1;
2242         uint32_t brc_mode_enable:1;
2243         uint32_t slice_type:2;
2244         uint32_t reserved0:1;
2245         uint32_t stream_in_type:4;
2246         uint32_t enable_adaptive_mv_stream_in:1;
2247         uint32_t reserved1:1;
2248         uint32_t enable_intra_cost_scaling_for_static_frame:1;
2249         uint32_t reserved2:20;
2250     } dw0;
2251
2252     struct
2253     {
2254         uint32_t qp_value:8;
2255         uint32_t num_of_refs:8;
2256         uint32_t hme_stream_in_ref_cost:8;
2257         uint32_t reserved0:8;
2258     } dw1;
2259
2260     struct
2261     {
2262         uint32_t frame_width_in_mbs:16;
2263         uint32_t frame_height_in_mbs:16;
2264     } dw2;
2265
2266     struct
2267     {
2268         uint32_t large_mv_threshold;
2269     } dw3;
2270
2271     struct
2272     {
2273         uint32_t total_large_mv_threshold;
2274     } dw4;
2275
2276     struct
2277     {
2278         uint32_t zmv_threshold;
2279     } dw5;
2280
2281     struct
2282     {
2283         uint32_t total_zmv_threshold;
2284     } dw6;
2285
2286     struct
2287     {
2288         uint32_t min_dist_threshold;
2289     } dw7;
2290
2291     char cost_table[52];
2292     struct
2293     {
2294         uint32_t actual_width_in_mb:16;
2295         uint32_t actual_height_in_mb:16;
2296     } dw21;
2297
2298     struct
2299     {
2300         uint32_t reserved;
2301     } dw22;
2302
2303     struct
2304     {
2305         uint32_t reserved;
2306     } dw23;
2307
2308     struct
2309     {
2310         uint32_t vdenc_input_image_state_index;
2311     } dw24;
2312
2313     struct
2314     {
2315         uint32_t reserved;
2316     } dw25;
2317
2318     struct
2319     {
2320         uint32_t mv_data_surface_index;
2321     } dw26;
2322
2323     struct
2324     {
2325         uint32_t inter_distortion_surface_index;
2326     } dw27;
2327
2328     struct
2329     {
2330         uint32_t output_data_surface_index;
2331     } dw28;
2332
2333     struct
2334     {
2335         uint32_t vdenc_output_image_state_index;
2336     } dw29;
2337
2338 }gen9_avc_sfd_curbe_data;
2339
2340 struct gen_avc_sfd_context
2341 {
2342     struct i965_gpe_context gpe_contexts;
2343 };
2344
2345 /* Gen95 */
2346
2347 typedef struct _gen95_avc_scaling4x_curbe_data
2348 {
2349     struct {
2350         uint32_t   input_picture_width  :16;
2351         uint32_t   input_picture_height :16;
2352     } dw0;
2353
2354     struct {
2355         uint32_t   input_y_bti_frame;
2356     } dw1;
2357
2358     struct {
2359         uint32_t   output_y_bti_frame;
2360     } dw2;
2361
2362     struct {
2363         uint32_t reserved;
2364     } dw3;
2365
2366     struct {
2367         uint32_t reserved;
2368     } dw4;
2369
2370     struct {
2371         uint32_t flatness_threshold;
2372     } dw5;
2373
2374     struct
2375     {
2376         uint32_t enable_mb_flatness_check:1;
2377         uint32_t enable_mb_variance_output:1;
2378         uint32_t enable_mb_pixel_average_output:1;
2379         uint32_t enable_block8x8_statistics_output:1;
2380         uint32_t reserved0:28;
2381     } dw6;
2382
2383     struct {
2384         uint32_t reserved;
2385     } dw7;
2386
2387     struct {
2388         uint32_t mbv_proc_stat_bti_frame;
2389     } dw8;
2390
2391     struct {
2392         uint32_t reserved;
2393     } dw9;
2394
2395     struct {
2396         uint32_t reserved;
2397     } dw10;
2398
2399     struct {
2400         uint32_t reserved;
2401     } dw11;
2402
2403     struct {
2404         uint32_t reserved;
2405     } dw12;
2406
2407     struct {
2408         uint32_t reserved;
2409     } dw13;
2410
2411     struct {
2412         uint32_t reserved;
2413     } dw14;
2414
2415     struct {
2416         uint32_t reserved;
2417     } dw15;
2418 } gen95_avc_scaling4x_curbe_data;
2419
2420 typedef enum _gen95_avc_binding_table_offset_frame_brc_update
2421 {
2422     GEN95_AVC_FRAME_BRC_UPDATE_HISTORY_INDEX                = 0,
2423     GEN95_AVC_FRAME_BRC_UPDATE_PAK_STATISTICS_OUTPUT_INDEX  = 1,
2424     GEN95_AVC_FRAME_BRC_UPDATE_IMAGE_STATE_READ_INDEX       = 2,
2425     GEN95_AVC_FRAME_BRC_UPDATE_IMAGE_STATE_WRITE_INDEX      = 3,
2426     GEN95_AVC_FRAME_BRC_UPDATE_MBENC_CURBE_WRITE_INDEX      = 4,
2427     GEN95_AVC_FRAME_BRC_UPDATE_DISTORTION_INDEX             = 5,
2428     GEN95_AVC_FRAME_BRC_UPDATE_CONSTANT_DATA_INDEX          = 6,
2429     GEN95_AVC_FRAME_BRC_UPDATE_MB_STATUS_INDEX              = 7,
2430     GEN95_AVC_FRAME_BRC_UPDATE_NUM_SURFACES_INDEX           = 8
2431 } gen95_avc_binding_table_offset_frame_brc_update;
2432
2433 typedef enum _gen95_avc_binding_table_offset_mbenc
2434 {
2435     GEN95_AVC_MBENC_BRC_CURBE_DATA_INDEX                     = 39,
2436     GEN95_AVC_MBENC_FORCE_NONSKIP_MB_MAP_INDEX               = 40,
2437     GEN95_AVC_MBENC_WIDI_WA_INDEX                            = 41,
2438     GEN95_AVC_MBENC_SFD_COST_TABLE_INDEX                     = 42,
2439     GEN95_AVC_MBENC_NUM_SURFACES_INDEX                       = 43
2440 } gen95_avc_binding_table_offset_mbenc;
2441
2442 typedef struct _gen95_avc_mbenc_curbe_data
2443 {
2444     struct
2445     {
2446         uint32_t skip_mode_enable:1;
2447         uint32_t adaptive_enable:1;
2448         uint32_t bi_mix_dis:1;
2449         uint32_t reserved0:2;
2450         uint32_t early_ime_success_enable:1;
2451         uint32_t reserved1:1;
2452         uint32_t t8x8_flag_for_inter_enable:1;
2453         uint32_t reserved2:16;
2454         uint32_t early_ime_stop:8;
2455     } dw0;
2456
2457     struct {
2458         uint32_t max_num_mvs:6;
2459         uint32_t extended_mv_cost_range:1;
2460         uint32_t reserved0:9;
2461         uint32_t bi_weight:6;
2462         uint32_t reserved1:6;
2463         uint32_t uni_mix_disable:1;
2464         uint32_t reserved2:3;
2465     } dw1;
2466
2467     struct {
2468         uint32_t max_len_sp:8;
2469         uint32_t max_num_su:8;
2470         uint32_t pitch_width:16;
2471     } dw2;
2472
2473     struct {
2474         uint32_t src_size:2;
2475         uint32_t reserved0:2;
2476         uint32_t mb_type_remap:2;
2477         uint32_t src_access:1;
2478         uint32_t ref_access:1;
2479         uint32_t search_ctrl:3;
2480         uint32_t dual_search_path_option:1;
2481         uint32_t sub_pel_mode:2;
2482         uint32_t skip_type:1;
2483         uint32_t disable_field_cache_allocation:1;
2484         uint32_t inter_chroma_mode:1;
2485         uint32_t ftq_enable:1;
2486         uint32_t bme_disable_fbr:1;
2487         uint32_t block_based_skip_enable:1;
2488         uint32_t inter_sad:2;
2489         uint32_t intra_sad:2;
2490         uint32_t sub_mb_part_mask:7;
2491         uint32_t reserved1:1;
2492     } dw3;
2493
2494     struct {
2495         uint32_t picture_height_minus1:16;
2496         uint32_t mv_restriction_in_slice_enable:1;
2497         uint32_t delta_mv_enable:1;
2498         uint32_t true_distortion_enable:1;
2499         uint32_t enable_wavefront_optimization:1;
2500         uint32_t enable_fbr_bypass:1;
2501         uint32_t enable_intra_cost_scaling_for_static_frame:1;
2502         uint32_t enable_intra_refresh:1;
2503         uint32_t enable_widi_wa_surf:1;
2504         uint32_t enable_widi_dirty_rect:1;
2505         uint32_t enable_cur_fld_idr:1;
2506         uint32_t contrained_intra_pred_flag:1;
2507         uint32_t field_parity_flag:1;
2508         uint32_t hme_enable:1;
2509         uint32_t picture_type:2;
2510         uint32_t use_actual_ref_qp_value:1;
2511     } dw4;
2512
2513     struct {
2514         uint32_t slice_mb_height:16;
2515         uint32_t ref_width:8;
2516         uint32_t ref_height:8;
2517     } dw5;
2518
2519     struct {
2520         uint32_t batch_buffer_end;
2521     } dw6;
2522
2523     struct {
2524         uint32_t intra_part_mask:5;
2525         uint32_t non_skip_zmv_added:1;
2526         uint32_t non_skip_mode_added:1;
2527         uint32_t luma_intra_src_corner_swap:1;
2528         uint32_t reserved0:8;
2529         uint32_t mv_cost_scale_factor:2;
2530         uint32_t bilinear_enable:1;
2531         uint32_t src_field_polarity:1;
2532         uint32_t weightedsad_harr:1;
2533         uint32_t ac_only_haar:1;
2534         uint32_t ref_id_cost_mode:1;
2535         uint32_t reserved1:1;
2536         uint32_t skip_center_mask:8;
2537     } dw7;
2538
2539     struct {
2540         uint32_t mode_0_cost:8;
2541         uint32_t mode_1_cost:8;
2542         uint32_t mode_2_cost:8;
2543         uint32_t mode_3_cost:8;
2544     } dw8;
2545
2546     struct {
2547         uint32_t mode_4_cost:8;
2548         uint32_t mode_5_cost:8;
2549         uint32_t mode_6_cost:8;
2550         uint32_t mode_7_cost:8;
2551     } dw9;
2552
2553     struct {
2554         uint32_t mode_8_cost:8;
2555         uint32_t mode_9_cost:8;
2556         uint32_t ref_id_cost:8;
2557         uint32_t chroma_intra_mode_cost:8;
2558     } dw10;
2559
2560     union{
2561         struct {
2562             uint32_t mv_0_cost:8;
2563             uint32_t mv_1_cost:8;
2564             uint32_t mv_2_cost:8;
2565             uint32_t mv_3_cost:8;
2566         };
2567         uint32_t value;
2568     }dw11;
2569
2570     struct {
2571         uint32_t mv_4_cost:8;
2572         uint32_t mv_5_cost:8;
2573         uint32_t mv_6_cost:8;
2574         uint32_t mv_7_cost:8;
2575     } dw12;
2576
2577     struct {
2578         uint32_t qp_prime_y:8;
2579         uint32_t qp_prime_cb:8;
2580         uint32_t qp_prime_cr:8;
2581         uint32_t target_size_in_word:8;
2582     } dw13;
2583
2584     struct {
2585         uint32_t sic_fwd_transcoeff_threshold_0:16;
2586         uint32_t sic_fwd_transcoeff_threshold_1:8;
2587         uint32_t sic_fwd_transcoeff_threshold_2:8;
2588     } dw14;
2589
2590     struct {
2591         uint32_t sic_fwd_transcoeff_threshold_3:8;
2592         uint32_t sic_fwd_transcoeff_threshold_4:8;
2593         uint32_t sic_fwd_transcoeff_threshold_5:8;
2594         uint32_t sic_fwd_transcoeff_threshold_6:8;
2595     } dw15;
2596
2597     struct {
2598         struct generic_search_path_delta sp_delta_0;
2599         struct generic_search_path_delta sp_delta_1;
2600         struct generic_search_path_delta sp_delta_2;
2601         struct generic_search_path_delta sp_delta_3;
2602     } dw16;
2603
2604     struct {
2605         struct generic_search_path_delta sp_delta_4;
2606         struct generic_search_path_delta sp_delta_5;
2607         struct generic_search_path_delta sp_delta_6;
2608         struct generic_search_path_delta sp_delta_7;
2609     } dw17;
2610
2611     struct {
2612         struct generic_search_path_delta sp_delta_8;
2613         struct generic_search_path_delta sp_delta_9;
2614         struct generic_search_path_delta sp_delta_10;
2615         struct generic_search_path_delta sp_delta_11;
2616     } dw18;
2617
2618     struct {
2619         struct generic_search_path_delta sp_delta_12;
2620         struct generic_search_path_delta sp_delta_13;
2621         struct generic_search_path_delta sp_delta_14;
2622         struct generic_search_path_delta sp_delta_15;
2623     } dw19;
2624
2625     struct {
2626         struct generic_search_path_delta sp_delta_16;
2627         struct generic_search_path_delta sp_delta_17;
2628         struct generic_search_path_delta sp_delta_18;
2629         struct generic_search_path_delta sp_delta_19;
2630     } dw20;
2631
2632     struct {
2633         struct generic_search_path_delta sp_delta_20;
2634         struct generic_search_path_delta sp_delta_21;
2635         struct generic_search_path_delta sp_delta_22;
2636         struct generic_search_path_delta sp_delta_23;
2637     } dw21;
2638
2639     struct {
2640         struct generic_search_path_delta sp_delta_24;
2641         struct generic_search_path_delta sp_delta_25;
2642         struct generic_search_path_delta sp_delta_26;
2643         struct generic_search_path_delta sp_delta_27;
2644     } dw22;
2645
2646     struct {
2647         struct generic_search_path_delta sp_delta_28;
2648         struct generic_search_path_delta sp_delta_29;
2649         struct generic_search_path_delta sp_delta_30;
2650         struct generic_search_path_delta sp_delta_31;
2651     } dw23;
2652
2653     struct {
2654         struct generic_search_path_delta sp_delta_32;
2655         struct generic_search_path_delta sp_delta_33;
2656         struct generic_search_path_delta sp_delta_34;
2657         struct generic_search_path_delta sp_delta_35;
2658     } dw24;
2659
2660     struct {
2661         struct generic_search_path_delta sp_delta_36;
2662         struct generic_search_path_delta sp_delta_37;
2663         struct generic_search_path_delta sp_delta_38;
2664         struct generic_search_path_delta sp_delta_39;
2665     } dw25;
2666
2667     struct {
2668         struct generic_search_path_delta sp_delta_40;
2669         struct generic_search_path_delta sp_delta_41;
2670         struct generic_search_path_delta sp_delta_42;
2671         struct generic_search_path_delta sp_delta_43;
2672     } dw26;
2673
2674     struct {
2675         struct generic_search_path_delta sp_delta_44;
2676         struct generic_search_path_delta sp_delta_45;
2677         struct generic_search_path_delta sp_delta_46;
2678         struct generic_search_path_delta sp_delta_47;
2679     } dw27;
2680
2681     struct {
2682         struct generic_search_path_delta sp_delta_48;
2683         struct generic_search_path_delta sp_delta_49;
2684         struct generic_search_path_delta sp_delta_50;
2685         struct generic_search_path_delta sp_delta_51;
2686     } dw28;
2687
2688     struct {
2689         struct generic_search_path_delta sp_delta_52;
2690         struct generic_search_path_delta sp_delta_53;
2691         struct generic_search_path_delta sp_delta_54;
2692         struct generic_search_path_delta sp_delta_55;
2693     } dw29;
2694
2695     struct {
2696         uint32_t intra_4x4_mode_mask:9;
2697         uint32_t reserved0:7;
2698         uint32_t intra_8x8_mode_mask:9;
2699         uint32_t reserved1:7;
2700     } dw30;
2701
2702     struct {
2703         uint32_t intra_16x16_mode_mask:4;
2704         uint32_t intra_chroma_mode_mask:4;
2705         uint32_t intra_compute_type:2;
2706         uint32_t reserved0:22;
2707     } dw31;
2708
2709     struct {
2710         uint32_t skip_val:16;
2711         uint32_t mult_pred_l0_disable:8;
2712         uint32_t mult_pred_l1_disable:8;
2713     } dw32;
2714
2715     struct {
2716         uint32_t intra_16x16_nondc_penalty:8;
2717         uint32_t intra_8x8_nondc_penalty:8;
2718         uint32_t intra_4x4_nondc_penalty:8;
2719         uint32_t reserved0:8;
2720     } dw33;
2721
2722     struct {
2723         uint32_t list0_ref_id0_field_parity:1;
2724         uint32_t list0_ref_id1_field_parity:1;
2725         uint32_t list0_ref_id2_field_parity:1;
2726         uint32_t list0_ref_id3_field_parity:1;
2727         uint32_t list0_ref_id4_field_parity:1;
2728         uint32_t list0_ref_id5_field_parity:1;
2729         uint32_t list0_ref_id6_field_parity:1;
2730         uint32_t list0_ref_id7_field_parity:1;
2731         uint32_t list1_ref_id0_frm_field_parity:1;
2732         uint32_t list1_ref_id1_frm_field_parity:1;
2733         uint32_t widi_intra_refresh_en:2;
2734         uint32_t arbitray_num_mbs_per_slice:1;
2735         uint32_t tq_enable:1;
2736         uint32_t force_non_skip_check:1;
2737         uint32_t disable_enc_skip_check:1;
2738         uint32_t enable_direct_bias_adjustment:1;
2739         uint32_t b_force_to_skip:1;
2740         uint32_t enable_global_motion_bias_adjustment:1;
2741         uint32_t enable_adaptive_tx_decision:1;
2742         uint32_t enable_per_mb_static_check:1;
2743         uint32_t enable_adaptive_search_window_size:1;
2744         uint32_t reserved0:1;
2745         uint32_t cqp_flag:1;
2746         uint32_t list1_ref_id0_field_parity:1;
2747         uint32_t list1_ref_id1_field_parity:1;
2748         uint32_t mad_enable_falg:1;
2749         uint32_t roi_enable_flag:1;
2750         uint32_t enable_mb_flatness_check_optimization:1;
2751         uint32_t b_direct_mode:1;
2752         uint32_t mb_brc_enable:1;
2753         uint32_t b_original_bff:1;
2754     } dw34;
2755
2756     struct {
2757         uint32_t panic_mode_mb_threshold:16;
2758         uint32_t small_mb_size_in_word:8;
2759         uint32_t large_mb_size_in_word:8;
2760     } dw35;
2761
2762     struct {
2763         uint32_t num_ref_idx_l0_minus_one:8;
2764         uint32_t hme_combined_extra_sus:8;
2765         uint32_t num_ref_idx_l1_minus_one:8;
2766         uint32_t reserved0:4;
2767         uint32_t is_fwd_frame_short_term_ref:1;
2768         uint32_t check_all_fractional_enable:1;
2769         uint32_t hme_combine_overlap:2;
2770     } dw36;
2771
2772     struct {
2773         uint32_t skip_mode_enable:1;
2774         uint32_t adaptive_enable:1;
2775         uint32_t bi_mix_dis:1;
2776         uint32_t reserved0:2;
2777         uint32_t early_ime_success_enable:1;
2778         uint32_t reserved1:1;
2779         uint32_t t8x8_flag_for_inter_enable:1;
2780         uint32_t reserved2:16;
2781         uint32_t early_ime_stop:8;
2782     } dw37;
2783
2784     /* reserved */
2785     struct {
2786         uint32_t max_len_sp:8;
2787         uint32_t max_num_su:8;
2788         uint32_t ref_threshold:16;
2789     } dw38;
2790
2791     struct {
2792         uint32_t reserved0:8;
2793         uint32_t hme_ref_windows_comb_threshold:8;
2794         uint32_t ref_width:8;
2795         uint32_t ref_height:8;
2796     } dw39;
2797
2798     struct {
2799         uint32_t dist_scale_factor_ref_id0_list0:16;
2800         uint32_t dist_scale_factor_ref_id1_list0:16;
2801     } dw40;
2802
2803     struct {
2804         uint32_t dist_scale_factor_ref_id2_list0:16;
2805         uint32_t dist_scale_factor_ref_id3_list0:16;
2806     } dw41;
2807
2808     struct {
2809         uint32_t dist_scale_factor_ref_id4_list0:16;
2810         uint32_t dist_scale_factor_ref_id5_list0:16;
2811     } dw42;
2812
2813     struct {
2814         uint32_t dist_scale_factor_ref_id6_list0:16;
2815         uint32_t dist_scale_factor_ref_id7_list0:16;
2816     } dw43;
2817
2818     struct {
2819         uint32_t actual_qp_value_for_ref_id0_list0:8;
2820         uint32_t actual_qp_value_for_ref_id1_list0:8;
2821         uint32_t actual_qp_value_for_ref_id2_list0:8;
2822         uint32_t actual_qp_value_for_ref_id3_list0:8;
2823     } dw44;
2824
2825     struct {
2826         uint32_t actual_qp_value_for_ref_id4_list0:8;
2827         uint32_t actual_qp_value_for_ref_id5_list0:8;
2828         uint32_t actual_qp_value_for_ref_id6_list0:8;
2829         uint32_t actual_qp_value_for_ref_id7_list0:8;
2830     } dw45;
2831
2832     struct {
2833         uint32_t actual_qp_value_for_ref_id0_list1:8;
2834         uint32_t actual_qp_value_for_ref_id1_list1:8;
2835         uint32_t ref_cost:16;
2836     } dw46;
2837
2838     struct {
2839         uint32_t mb_qp_read_factor:8;
2840         uint32_t intra_cost_sf:8;
2841         uint32_t max_vmv_r:16;
2842     } dw47;
2843
2844     struct {
2845         uint32_t widi_intra_refresh_mb_x:16;
2846         uint32_t widi_intra_refresh_unit_in_mb_minus1:8;
2847         uint32_t widi_intra_refresh_qp_delta:8;
2848     } dw48;
2849
2850     struct {
2851         uint32_t roi_1_x_left:16;
2852         uint32_t roi_1_y_top:16;
2853     } dw49;
2854
2855     struct {
2856         uint32_t roi_1_x_right:16;
2857         uint32_t roi_1_y_bottom:16;
2858     } dw50;
2859
2860     struct {
2861         uint32_t roi_2_x_left:16;
2862         uint32_t roi_2_y_top:16;
2863     } dw51;
2864
2865     struct {
2866         uint32_t roi_2_x_right:16;
2867         uint32_t roi_2_y_bottom:16;
2868     } dw52;
2869
2870     struct {
2871         uint32_t roi_3_x_left:16;
2872         uint32_t roi_3_y_top:16;
2873     } dw53;
2874
2875     struct {
2876         uint32_t roi_3_x_right:16;
2877         uint32_t roi_3_y_bottom:16;
2878     } dw54;
2879
2880     struct {
2881         uint32_t roi_4_x_left:16;
2882         uint32_t roi_4_y_top:16;
2883     } dw55;
2884
2885     struct {
2886         uint32_t roi_4_x_right:16;
2887         uint32_t roi_4_y_bottom:16;
2888     } dw56;
2889
2890     struct {
2891         uint32_t roi_1_dqp_prime_y:8;
2892         uint32_t roi_2_dqp_prime_y:8;
2893         uint32_t roi_3_dqp_prime_y:8;
2894         uint32_t roi_4_dqp_prime_y:8;
2895     } dw57;
2896
2897     union{
2898         struct {
2899             uint32_t lambda_8x8_inter:16;
2900             uint32_t lambda_8x8_intra:16;
2901         };
2902         uint32_t value;
2903     } dw58;
2904
2905     union{
2906         struct {
2907             uint32_t lambda_inter:16;
2908             uint32_t lambda_intra:16;
2909         };
2910         uint32_t value;
2911     } dw59;
2912
2913     struct {
2914         uint32_t mb_texture_threshold:16;
2915         uint32_t tx_decision_threshold:16;
2916     } dw60;
2917
2918     struct {
2919         uint32_t hme_mv_cost_scaling_factor:8;
2920         uint32_t reserved0:8;
2921         uint32_t widi_intra_refresh_mb_y:16;
2922     } dw61;
2923
2924     struct {
2925         uint32_t reserved;
2926     } dw62;
2927
2928     struct {
2929         uint32_t reserved;
2930     } dw63;
2931
2932     struct {
2933         uint32_t reserved;
2934     } dw64;
2935
2936     struct {
2937         uint32_t reserved;
2938     } dw65;
2939
2940     struct {
2941         uint32_t mb_data_surf_index;
2942     } dw66;
2943
2944     struct {
2945         uint32_t mv_data_surf_index;
2946     } dw67;
2947
2948     struct {
2949         uint32_t i_dist_surf_index;
2950     } dw68;
2951
2952     struct {
2953         uint32_t src_y_surf_index;
2954     } dw69;
2955
2956     struct {
2957         uint32_t mb_specific_data_surf_index;
2958     } dw70;
2959
2960     struct {
2961         uint32_t aux_vme_out_surf_index;
2962     } dw71;
2963
2964     struct {
2965         uint32_t curr_ref_pic_sel_surf_index;
2966     } dw72;
2967
2968     struct {
2969         uint32_t hme_mv_pred_fwd_bwd_surf_index;
2970     } dw73;
2971
2972     struct {
2973         uint32_t hme_dist_surf_index;
2974     } dw74;
2975
2976     struct {
2977         uint32_t slice_map_surf_index;
2978     } dw75;
2979
2980     struct {
2981         uint32_t fwd_frm_mb_data_surf_index;
2982     } dw76;
2983
2984     struct {
2985         uint32_t fwd_frm_mv_surf_index;
2986     } dw77;
2987
2988     struct {
2989         uint32_t mb_qp_buffer;
2990     } dw78;
2991
2992     struct {
2993         uint32_t mb_brc_lut;
2994     } dw79;
2995
2996     struct {
2997         uint32_t vme_inter_prediction_surf_index;
2998     } dw80;
2999
3000     struct {
3001         uint32_t vme_inter_prediction_mr_surf_index;
3002     } dw81;
3003
3004     struct {
3005         uint32_t mb_stats_surf_index;
3006     } dw82;
3007
3008     struct {
3009         uint32_t mad_surf_index;
3010     } dw83;
3011
3012     struct {
3013         uint32_t brc_curbe_surf_index;
3014     } dw84;
3015
3016     struct {
3017         uint32_t force_non_skip_mb_map_surface;
3018     } dw85;
3019
3020     struct {
3021         uint32_t widi_wa_surf_index;
3022     } dw86;
3023
3024     struct {
3025         uint32_t static_detection_cost_table_index;
3026     } dw87;
3027
3028 } gen95_avc_mbenc_curbe_data;
3029
3030 #endif /* GEN9_AVC_ENCODER_H */