OSDN Git Service

Add vdenc common commands for CNL
[android-x86/hardware-intel-common-vaapi.git] / src / i965_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 I965_AVC_ENCODER_H
30 #define I965_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     union {
53         struct {
54             uint32_t dword_length: 12;
55             uint32_t pad0: 4;
56             uint32_t sub_opcode_b: 5;
57             uint32_t sub_opcode_a: 3;
58             uint32_t command_opcode: 3;
59             uint32_t pipeline: 2;
60             uint32_t command_type: 3;
61         };
62
63         uint32_t value;
64     } dw0;
65
66     struct {
67         uint32_t frame_size_in_mbs: 16; //minus1
68         uint32_t pad0: 16;
69     } dw1;
70
71     struct {
72         uint32_t frame_width_in_mbs_minus1: 8; //minus1
73         uint32_t pad0: 8;
74         uint32_t frame_height_in_mbs_minus1: 8; //minus1
75         uint32_t pad1: 8;
76     } dw2;
77
78     struct {
79         uint32_t pad0: 8;
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;
84         uint32_t pad1: 2;
85         uint32_t chroma_qp_offset: 5;
86         uint32_t pad2: 3;
87         uint32_t second_chroma_qp_offset: 5;
88         uint32_t pad3: 3;
89     } dw3;
90
91     struct {
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;
101         uint32_t pad0: 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;
108     } dw4;
109
110     struct {
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;
115         uint32_t pad0: 3;
116         uint32_t intra_mb_ipcm_flag: 1;
117         uint32_t pad1: 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
121         uint32_t pad2: 3;
122         uint32_t non_first_pass_flag: 1;
123         uint32_t pad3: 10;
124         uint32_t aq_chroma_disable: 1;
125         uint32_t aq_rounding: 3;
126         uint32_t aq_enable: 1;
127     } dw5;
128
129     struct {
130         uint32_t intra_mb_max_size: 12;
131         uint32_t pad0: 4;
132         uint32_t inter_mb_max_size: 12;
133         uint32_t pad1: 4;
134     } dw6;
135
136     struct {
137         uint32_t vsl_top_mb_trans8x8_flag: 1;
138         uint32_t pad0: 31;
139     } dw7;
140
141     struct {
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;
146     } dw8;
147
148     struct {
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;
153     } dw9;
154
155     struct {
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;
162     } dw10;
163
164     struct {
165         uint32_t frame_bitrate_min_delta: 15;
166         uint32_t pad0: 1;
167         uint32_t frame_bitrate_max_delta: 15;
168         uint32_t slice_tsats_streamout_enable: 1;
169     } dw11;
170
171     struct {
172         uint32_t pad0: 16;
173         uint32_t mpeg2_old_mode_select: 1;
174         uint32_t vad_noa_mux_select: 1;
175         uint32_t vad_error_logic: 1;
176         uint32_t pad1: 1;
177         uint32_t vmd_error_logic: 1;
178         uint32_t pad2: 11;
179     } dw12;
180
181     struct {
182         uint32_t pic_qp_init_minus26: 8;
183         uint32_t pic_num_ref_idx_l0_active_minus1: 6;
184         uint32_t pad0: 2;
185         uint32_t pic_num_ref_idx_l1_active_minus1: 6;
186         uint32_t pad1: 2;
187         uint32_t num_ref_frames: 5;
188         uint32_t is_curr_pic_has_mmco5: 1;
189         uint32_t pad2: 2;
190     } dw13;
191
192     struct {
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;
196         uint32_t pad0: 4;
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;
203     } dw14;
204
205     struct {
206         uint32_t slice_group_change_rate: 16;
207         uint32_t curr_pic_frame_num: 16;
208     } dw15;
209
210     struct {
211         uint32_t current_frame_view_id: 10;
212         uint32_t pad0: 2;
213         uint32_t max_view_idx_l0: 4;
214         uint32_t pad1: 2;
215         uint32_t max_view_idx_l1: 4;
216         uint32_t pad2: 9;
217         uint32_t inter_view_order_disable: 1;
218     } dw16;
219
220     struct {
221         uint32_t fqp: 3;                        // Must be zero for SKL
222         uint32_t fqp_offset: 3;                 // Must be zero for SKL
223         uint32_t pad0: 2;
224         uint32_t ext_brc_dm_stat_en: 1;         // Must be zero for SKL
225         uint32_t pad1: 7;
226         uint32_t brc_dm_avg_mb_qp: 6;           // Must be zero for SKL
227         uint32_t pad2: 10;
228     } dw17;
229
230     struct {
231         uint32_t brc_domain_target_frame_size;
232     } dw18;
233
234     struct {
235         uint32_t threshold_size_in_bytes;
236     } dw19;
237
238     struct {
239         uint32_t target_slice_size_in_bytes;
240     } dw20;
241 };
242
243 /*
244    the definition for encoder status
245 */
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;
253 };
254
255 struct encoder_status_buffer_internal {
256     dri_bo *bo;
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;
263
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;
271 };
272
273 /* BRC define */
274 #define CLIP(x, min, max)                                             \
275     {                                                                   \
276         (x) = (((x) > (max)) ? (max) : (((x) < (min)) ? (min) : (x)));  \
277     }
278
279 typedef struct _kernel_header_ {
280     uint32_t       reserved                        : 6;
281     uint32_t       kernel_start_pointer            : 26;
282 } kernel_header;
283
284 struct generic_search_path_delta {
285     uint8_t search_path_delta_x: 4;
286     uint8_t search_path_delta_y: 4;
287 };
288
289 struct scaling_param {
290     VASurfaceID             curr_pic;
291     void                    *p_scaling_bti;
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;
306     bool                    use_4x_scaling;
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;
312 };
313
314 struct avc_surface_param {
315     uint32_t frame_width;
316     uint32_t frame_height;
317 };
318 struct me_param {
319     uint32_t hme_type;
320 };
321 struct wp_param {
322     uint32_t ref_list_idx;
323 };
324
325 struct brc_param {
326     struct i965_gpe_context * gpe_context_brc_frame_update;
327     struct i965_gpe_context * gpe_context_mbenc;
328 };
329
330 struct mbenc_param {
331     uint32_t frame_width_in_mb;
332     uint32_t frame_height_in_mb;
333     uint32_t mbenc_i_frame_dist_in_use;
334     uint32_t mad_enable;
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;
341 };
342
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;
351
352     //mv code and mv data
353     struct i965_gpe_resource res_mb_code_surface;
354     struct i965_gpe_resource res_mv_data_surface;
355
356     struct i965_gpe_resource res_ref_pic_select_surface;
357
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;
365
366     //dmv top/bottom
367     dri_bo *dmv_top;
368     dri_bo *dmv_bottom;
369
370     int dmv_bottom_flag;
371     int frame_store_id;
372     int frame_idx;
373     int is_as_ref;
374     unsigned int qp_value;
375     int top_field_order_cnt;
376 };
377
378 typedef struct _gen9_avc_encoder_kernel_header {
379     int nKernelCount;
380
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;
397
398     // HME
399     kernel_header me_p;
400     kernel_header me_b;
401
402     // DownScaling
403     kernel_header ply_dscale_ply;
404     kernel_header ply_dscale_2f_ply_2f;
405
406     // BRC Init frame
407     kernel_header frame_brc_init;
408
409     // FrameBRC Update
410     kernel_header frame_brc_update;
411
412     // BRC Reset frame
413     kernel_header frame_brc_reset;
414
415     // BRC I Frame Distortion
416     kernel_header frame_brc_i_dist;
417
418     // MbBRC Update
419     kernel_header mb_brc_update;
420
421     // 2x DownScaling
422     kernel_header ply_2xdscale_ply;
423     kernel_header ply_2xdscale_2f_ply_2f;
424
425     //Weighted Prediction Kernel
426     kernel_header wp;
427
428     // Static frame detection Kernel
429     kernel_header static_detection;
430 } gen9_avc_encoder_kernel_header;
431
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 {
435     int nKernelCount;
436
437     /* MBENC FEI kernels*/
438     kernel_header mbenc_i;
439     kernel_header mbenc_p;
440     kernel_header mbenc_b;
441
442     /* PreProcessing FEI kernel */
443     kernel_header preproc;
444
445     /* HME */
446     kernel_header me_p;
447     kernel_header me_b;
448
449     /* DownScaling */
450     kernel_header ply_dscale_ply;
451     kernel_header ply_dscale_2f_ply_2f;
452
453     /* BRC_I Frame Distortion */
454     kernel_header frame_brc_i_dist;
455
456     // 2x DownScaling
457     kernel_header ply_2xdscale_ply;
458     kernel_header ply_2xdscale_2f_ply_2f;
459
460     //Weighted Prediction Kernel
461     kernel_header wp;
462
463 } gen9_avc_fei_encoder_kernel_header;
464
465 /*
466    The definition for Scaling
467 */
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;
474
475 typedef struct _gen9_avc_scaling4x_curbe_data {
476     struct {
477         uint32_t   input_picture_width  : 16;
478         uint32_t   input_picture_height : 16;
479     } dw0;
480
481     struct {
482         uint32_t   input_y_bti;
483     } dw1;
484
485     struct {
486         uint32_t   output_y_bti;
487     } dw2;
488
489     struct {
490         uint32_t reserved;
491     } dw3;
492
493     struct {
494         uint32_t reserved;
495     } dw4;
496
497     struct {
498         uint32_t flatness_threshold;
499     } dw5;
500
501     struct {
502         uint32_t enable_mb_flatness_check;
503     } dw6;
504
505     struct {
506         uint32_t enable_mb_variance_output;
507     } dw7;
508
509     struct {
510         uint32_t enable_mb_pixel_average_output;
511     } dw8;
512
513     struct {
514         uint32_t reserved;
515     } dw9;
516
517     struct {
518         uint32_t mbv_proc_stat_bti;
519     } dw10;
520
521     struct {
522         uint32_t reserved;
523     } dw11;
524 } gen9_avc_scaling4x_curbe_data;
525
526 typedef struct _gen9_avc_scaling2x_curbe_data {
527     struct {
528         uint32_t   input_picture_width  : 16;
529         uint32_t   input_picture_height : 16;
530     } dw0;
531
532     /* dw1-dw7 */
533     uint32_t reserved1[7];
534
535     struct {
536         uint32_t input_y_bti;
537     } dw8;
538
539     struct {
540         uint32_t output_y_bti;
541     } dw9;
542
543     uint32_t reserved2[2];
544 } gen9_avc_scaling2x_curbe_data;
545
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
549
550 struct gen_avc_scaling_context {
551     struct i965_gpe_context gpe_contexts[NUM_GEN9_AVC_KERNEL_SCALING];
552 };
553
554 /*
555 me structure and define
556 */
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;
588
589 typedef struct _gen9_avc_me_curbe_data {
590     struct {
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;
600     } dw0;
601
602     struct {
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;
609     } dw1;
610
611     struct {
612         uint32_t max_len_sp: 8;
613         uint32_t max_num_su: 8;
614         uint32_t reserved0: 16;
615     } dw2;
616
617     struct {
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;
636     } dw3;
637
638     struct {
639         uint32_t reserved0: 8;
640         uint32_t picture_height_minus1: 8;
641         uint32_t picture_width: 8;
642         uint32_t reserved1: 8;
643     } dw4;
644
645     struct {
646         uint32_t reserved0: 8;
647         uint32_t qp_prime_y: 8;
648         uint32_t ref_width: 8;
649         uint32_t ref_height: 8;
650     } dw5;
651
652     struct {
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;
659     } dw6;
660
661     struct {
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;
671     } dw7;
672
673     struct {
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;
678     } dw8;
679
680     struct {
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;
685     } dw9;
686
687     struct {
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;
692     } dw10;
693
694     struct {
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;
699     } dw11;
700
701     struct {
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;
706     } dw12;
707
708     struct {
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;
714     } dw13;
715
716     struct {
717         uint32_t l0_ref_pic_polarity_bits: 8;
718         uint32_t l1_ref_pic_polarity_bits: 2;
719         uint32_t reserved: 22;
720     } dw14;
721
722     struct {
723         uint32_t prev_mv_read_pos_factor : 8;
724         uint32_t mv_shift_factor : 8;
725         uint32_t reserved: 16;
726     } dw15;
727
728     struct {
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;
733     } dw16;
734
735     struct {
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;
740     } dw17;
741
742     struct {
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;
747     } dw18;
748
749     struct {
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;
754     } dw19;
755
756     struct {
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;
761     } dw20;
762
763     struct {
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;
768     } dw21;
769
770     struct {
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;
775     } dw22;
776
777     struct {
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;
782     } dw23;
783
784     struct {
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;
789     } dw24;
790
791     struct {
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;
796     } dw25;
797
798     struct {
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;
803     } dw26;
804
805     struct {
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;
810     } dw27;
811
812     struct {
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;
817     } dw28;
818
819     struct {
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;
824     } dw29;
825
826     struct {
827         uint32_t actual_mb_width: 16;
828         uint32_t actual_mb_height: 16;
829     } dw30;
830
831     struct {
832         uint32_t reserved0;
833     } dw31;
834
835     struct {
836         uint32_t _4x_memv_output_data_surf_index;
837     } dw32;
838
839     struct {
840         uint32_t _16x_32x_memv_input_data_surf_index;
841     } dw33;
842
843     struct {
844         uint32_t _4x_me_output_dist_surf_index;
845     } dw34;
846
847     struct {
848         uint32_t _4x_me_output_brc_dist_surf_index;
849     } dw35;
850
851     struct {
852         uint32_t vme_fwd_inter_pred_surf_index;
853     } dw36;
854
855     struct {
856         uint32_t vme_bdw_inter_pred_surf_index;
857     } dw37;
858
859     /* reserved */
860     struct {
861         uint32_t reserved;
862     } dw38;
863 } gen9_avc_me_curbe_data;
864
865 /* FeiPreEncFixme: name change fei to preenc */
866 typedef struct _gen9_avc_fei_me_curbe_data {
867     struct {
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;
877     } dw0;
878
879     struct {
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;
886     } dw1;
887
888     struct {
889         uint32_t max_len_sp: 8;
890         uint32_t max_num_su: 8;
891         uint32_t reserved0: 16;
892     } dw2;
893
894     struct {
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;
913     } dw3;
914
915     struct {
916         uint32_t reserved0: 8;
917         uint32_t picture_height_minus1: 8;
918         uint32_t picture_width: 8;
919         uint32_t reserved1: 8;
920     } dw4;
921
922     struct {
923         uint32_t reserved0: 8;
924         uint32_t qp_prime_y: 8;
925         uint32_t ref_width: 8;
926         uint32_t ref_height: 8;
927     } dw5;
928
929     struct {
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;
936     } dw6;
937
938     struct {
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;
948     } dw7;
949
950     struct {
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;
955     } dw8;
956
957     struct {
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;
962     } dw9;
963
964     struct {
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;
969     } dw10;
970
971     struct {
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;
976     } dw11;
977
978     struct {
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;
983     } dw12;
984
985     struct {
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;
990     } dw13;
991
992     struct {
993         uint32_t l0_ref_pic_polarity_bits: 8;
994         uint32_t l1_ref_pic_polarity_bits: 2;
995         uint32_t reserved: 22;
996     } dw14;
997
998     struct {
999         uint32_t prev_mv_read_pos_factor : 8;
1000         uint32_t mv_shift_factor : 8;
1001         uint32_t reserved: 16;
1002     } dw15;
1003
1004     struct {
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;
1009     } dw16;
1010
1011     struct {
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;
1016     } dw17;
1017
1018     struct {
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;
1023     } dw18;
1024
1025     struct {
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;
1030     } dw19;
1031
1032     struct {
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;
1037     } dw20;
1038
1039     struct {
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;
1044     } dw21;
1045
1046     struct {
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;
1051     } dw22;
1052
1053     struct {
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;
1058     } dw23;
1059
1060     struct {
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;
1065     } dw24;
1066
1067     struct {
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;
1072     } dw25;
1073
1074     struct {
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;
1079     } dw26;
1080
1081     struct {
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;
1086     } dw27;
1087
1088     struct {
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;
1093     } dw28;
1094
1095     struct {
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;
1100     } dw29;
1101
1102     struct {
1103         uint32_t reserved;
1104     } dw30;
1105
1106     struct {
1107         uint32_t reserved;
1108     } dw31;
1109
1110     struct {
1111         uint32_t _4x_memv_output_data_surf_index;
1112     } dw32;
1113
1114     struct {
1115         uint32_t _16x_32x_memv_input_data_surf_index;
1116     } dw33;
1117
1118     struct {
1119         uint32_t _4x_me_output_dist_surf_index;
1120     } dw34;
1121
1122     struct {
1123         uint32_t _4x_me_output_brc_dist_surf_index;
1124     } dw35;
1125
1126     struct {
1127         uint32_t vme_fwd_inter_pred_surf_index;
1128     } dw36;
1129
1130     struct {
1131         uint32_t vme_bdw_inter_pred_surf_index;
1132     } dw37;
1133
1134     /* reserved */
1135     struct {
1136         uint32_t reserved;
1137     } dw38;
1138 } gen9_avc_fei_me_curbe_data;
1139
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
1143
1144 struct gen_avc_me_context {
1145     struct i965_gpe_context gpe_contexts[NUM_GEN9_AVC_KERNEL_ME];
1146 };
1147
1148 /*
1149 frame/mb brc structure and define
1150 */
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;
1156
1157 typedef struct _gen9_avc_brc_init_reset_curbe_data {
1158     struct {
1159         uint32_t profile_level_max_frame;
1160     } dw0;
1161
1162     struct {
1163         uint32_t init_buf_full_in_bits;
1164     } dw1;
1165
1166     struct {
1167         uint32_t buf_size_in_bits;
1168     } dw2;
1169
1170     struct {
1171         uint32_t average_bit_rate;
1172     } dw3;
1173
1174     struct {
1175         uint32_t max_bit_rate;
1176     } dw4;
1177
1178     struct {
1179         uint32_t min_bit_rate;
1180     } dw5;
1181
1182     struct {
1183         uint32_t frame_rate_m;
1184     } dw6;
1185
1186     struct {
1187         uint32_t frame_rate_d;
1188     } dw7;
1189
1190     struct {
1191         uint32_t brc_flag: 16;
1192         uint32_t gop_p: 16;
1193     } dw8;
1194
1195     struct {
1196         uint32_t gop_b: 16;
1197         uint32_t frame_width_in_bytes: 16;
1198     } dw9;
1199
1200     struct {
1201         uint32_t frame_height_in_bytes: 16;
1202         uint32_t avbr_accuracy: 16;
1203     } dw10;
1204
1205     struct {
1206         uint32_t avbr_convergence: 16;
1207         uint32_t min_qp: 16;
1208     } dw11;
1209
1210     struct {
1211         uint32_t max_qp: 16;
1212         uint32_t no_slices: 16;
1213     } dw12;
1214
1215     struct {
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;
1220     } dw13;
1221
1222     struct {
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;
1227     } dw14;
1228
1229     struct {
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;
1234     } dw15;
1235
1236     struct {
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;
1241     } dw16;
1242
1243     struct {
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;
1248     } dw17;
1249
1250     struct {
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;
1255     } dw18;
1256
1257     struct {
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;
1262     } dw19;
1263
1264     struct {
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;
1269     } dw20;
1270
1271     struct {
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;
1276     } dw21;
1277
1278     struct {
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;
1283     } dw22;
1284
1285     struct {
1286         uint32_t acqp;
1287     } dw23;
1288
1289 } gen9_avc_brc_init_reset_curbe_data;
1290
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;
1303
1304 typedef struct _gen9_avc_frame_brc_update_curbe_data {
1305     struct {
1306         uint32_t target_size;
1307     } dw0;
1308
1309     struct {
1310         uint32_t frame_number;
1311     } dw1;
1312
1313     struct {
1314         uint32_t size_of_pic_headers;
1315     } dw2;
1316
1317     struct {
1318         uint32_t start_gadj_frame0: 16;
1319         uint32_t start_gadj_frame1: 16;
1320     } dw3;
1321
1322     struct {
1323         uint32_t start_gadj_frame2: 16;
1324         uint32_t start_gadj_frame3: 16;
1325     } dw4;
1326
1327     struct {
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;
1332     } dw5;
1333
1334     struct {
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;
1341     } dw6;
1342
1343     struct {
1344         uint32_t size_skip_frames;
1345     } dw7;
1346
1347     struct {
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;
1352     } dw8;
1353
1354     struct {
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;
1359     } dw9;
1360
1361     struct {
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;
1366     } dw10;
1367
1368     struct {
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;
1373     } dw11;
1374
1375     struct {
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;
1380     } dw12;
1381
1382     struct {
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;
1387     } dw13;
1388
1389     struct {
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;
1394     } dw14;
1395
1396     struct {
1397         uint32_t reserved0: 8;
1398         uint32_t enable_roi: 8;
1399         uint32_t reserved1: 8;
1400         uint32_t reserved2: 8;
1401     } dw15;
1402
1403     struct {
1404         uint32_t reserved;
1405     } dw16;
1406
1407     struct {
1408         uint32_t reserved;
1409     } dw17;
1410
1411     struct {
1412         uint32_t reserved;
1413     } dw18;
1414
1415     struct {
1416         uint32_t user_max_frame;
1417     } dw19;
1418
1419     struct {
1420         uint32_t reserved;
1421     } dw20;
1422
1423     struct {
1424         uint32_t reserved;
1425     } dw21;
1426
1427     struct {
1428         uint32_t reserved;
1429     } dw22;
1430
1431     struct {
1432         uint32_t reserved;
1433     } dw23;
1434
1435 } gen9_avc_frame_brc_update_curbe_data;
1436
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;
1444
1445 typedef struct _gen9_avc_mb_brc_curbe_data {
1446     struct {
1447         uint32_t cur_frame_type: 8;
1448         uint32_t enable_roi: 8;
1449         uint32_t roi_ratio: 8;
1450         uint32_t reserved0: 8;
1451     } dw0;
1452
1453     struct {
1454         uint32_t reserved;
1455     } dw1;
1456
1457     struct {
1458         uint32_t reserved;
1459     } dw2;
1460
1461     struct {
1462         uint32_t reserved;
1463     } dw3;
1464
1465     struct {
1466         uint32_t reserved;
1467     } dw4;
1468
1469     struct {
1470         uint32_t reserved;
1471     } dw5;
1472
1473     struct {
1474         uint32_t reserved;
1475     } dw6;
1476
1477
1478 } gen9_avc_mb_brc_curbe_data;
1479
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
1487
1488 struct gen_avc_brc_context {
1489     struct i965_gpe_context gpe_contexts[NUM_GEN9_AVC_KERNEL_BRC];
1490 };
1491
1492 /*
1493 wp structure and define
1494 */
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;
1500
1501 typedef struct _gen9_avc_wp_curbe_data {
1502     struct {
1503         uint32_t default_weight: 16;
1504         uint32_t default_offset: 16;
1505     } dw0;
1506
1507     struct {
1508         uint32_t roi_0_x_left: 16;
1509         uint32_t roi_0_y_top: 16;
1510     } dw1;
1511
1512     struct {
1513         uint32_t roi_0_x_right: 16;
1514         uint32_t roi_0_y_bottom: 16;
1515     } dw2;
1516
1517     struct {
1518         uint32_t roi_0_weight: 16;
1519         uint32_t roi_0_offset: 16;
1520     } dw3;
1521
1522     struct {
1523         uint32_t roi_1_x_left: 16;
1524         uint32_t roi_1_y_top: 16;
1525     } dw4;
1526
1527     struct {
1528         uint32_t roi_1_x_right: 16;
1529         uint32_t roi_1_y_bottom: 16;
1530     } dw5;
1531
1532     struct {
1533         uint32_t roi_1_weight: 16;
1534         uint32_t roi_1_offset: 16;
1535     } dw6;
1536
1537     struct {
1538         uint32_t roi_2_x_left: 16;
1539         uint32_t roi_2_y_top: 16;
1540     } dw7;
1541
1542     struct {
1543         uint32_t roi_2_x_right: 16;
1544         uint32_t roi_2_y_bottom: 16;
1545     } dw8;
1546
1547     struct {
1548         uint32_t roi_2_weight: 16;
1549         uint32_t roi_2_offset: 16;
1550     } dw9;
1551
1552     struct {
1553         uint32_t roi_3_x_left: 16;
1554         uint32_t roi_3_y_top: 16;
1555     } dw10;
1556
1557     struct {
1558         uint32_t roi_3_x_right: 16;
1559         uint32_t roi_3_y_bottom: 16;
1560     } dw11;
1561
1562     struct {
1563         uint32_t roi_3_weight: 16;
1564         uint32_t roi_3_offset: 16;
1565     } dw12;
1566
1567     struct {
1568         uint32_t roi_4_x_left: 16;
1569         uint32_t roi_4_y_top: 16;
1570     } dw13;
1571
1572     struct {
1573         uint32_t roi_4_x_right: 16;
1574         uint32_t roi_4_y_bottom: 16;
1575     } dw14;
1576
1577     struct {
1578         uint32_t roi_4_weight: 16;
1579         uint32_t roi_4_offset: 16;
1580     } dw15;
1581
1582     struct {
1583         uint32_t roi_5_x_left: 16;
1584         uint32_t roi_5_y_top: 16;
1585     } dw16;
1586
1587     struct {
1588         uint32_t roi_5_x_right: 16;
1589         uint32_t roi_5_y_bottom: 16;
1590     } dw17;
1591
1592     struct {
1593         uint32_t roi_5_weight: 16;
1594         uint32_t roi_5_offset: 16;
1595     } dw18;
1596
1597     struct {
1598         uint32_t roi_6_x_left: 16;
1599         uint32_t roi_6_y_top: 16;
1600     } dw19;
1601
1602     struct {
1603         uint32_t roi_6_x_right: 16;
1604         uint32_t roi_6_y_bottom: 16;
1605     } dw20;
1606
1607     struct {
1608         uint32_t roi_6_weight: 16;
1609         uint32_t roi_6_offset: 16;
1610     } dw21;
1611
1612     struct {
1613         uint32_t roi_7_x_left: 16;
1614         uint32_t roi_7_y_top: 16;
1615     } dw22;
1616
1617     struct {
1618         uint32_t roi_7_x_right: 16;
1619         uint32_t roi_7_y_bottom: 16;
1620     } dw23;
1621
1622     struct {
1623         uint32_t roi_7_weight: 16;
1624         uint32_t roi_7_offset: 16;
1625     } dw24;
1626
1627     struct {
1628         uint32_t roi_8_x_left: 16;
1629         uint32_t roi_8_y_top: 16;
1630     } dw25;
1631
1632     struct {
1633         uint32_t roi_8_x_right: 16;
1634         uint32_t roi_8_y_bottom: 16;
1635     } dw26;
1636
1637     struct {
1638         uint32_t roi_8_weight: 16;
1639         uint32_t roi_8_offset: 16;
1640     } dw27;
1641
1642     struct {
1643         uint32_t roi_9_x_left: 16;
1644         uint32_t roi_9_y_top: 16;
1645     } dw28;
1646
1647     struct {
1648         uint32_t roi_9_x_right: 16;
1649         uint32_t roi_9_y_bottom: 16;
1650     } dw29;
1651
1652     struct {
1653         uint32_t roi_9_weight: 16;
1654         uint32_t roi_9_offset: 16;
1655     } dw30;
1656
1657     struct {
1658         uint32_t roi_10_x_left: 16;
1659         uint32_t roi_10_y_top: 16;
1660     } dw31;
1661
1662     struct {
1663         uint32_t roi_10_x_right: 16;
1664         uint32_t roi_10_y_bottom: 16;
1665     } dw32;
1666
1667     struct {
1668         uint32_t roi_10_weight: 16;
1669         uint32_t roi_10_offset: 16;
1670     } dw33;
1671
1672     struct {
1673         uint32_t roi_11_x_left: 16;
1674         uint32_t roi_11_y_top: 16;
1675     } dw34;
1676
1677     struct {
1678         uint32_t roi_11_x_right: 16;
1679         uint32_t roi_11_y_bottom: 16;
1680     } dw35;
1681
1682     struct {
1683         uint32_t roi_11_weight: 16;
1684         uint32_t roi_11_offset: 16;
1685     } dw36;
1686
1687     struct {
1688         uint32_t roi_12_x_left: 16;
1689         uint32_t roi_12_y_top: 16;
1690     } dw37;
1691
1692     struct {
1693         uint32_t roi_12_x_right: 16;
1694         uint32_t roi_12_y_bottom: 16;
1695     } dw38;
1696
1697     struct {
1698         uint32_t roi_12_weight: 16;
1699         uint32_t roi_12_offset: 16;
1700     } dw39;
1701
1702     struct {
1703         uint32_t roi_13_x_left: 16;
1704         uint32_t roi_13_y_top: 16;
1705     } dw40;
1706
1707     struct {
1708         uint32_t roi_13_x_right: 16;
1709         uint32_t roi_13_y_bottom: 16;
1710     } dw41;
1711
1712     struct {
1713         uint32_t roi_13_weight: 16;
1714         uint32_t roi_13_offset: 16;
1715     } dw42;
1716
1717     struct {
1718         uint32_t roi_14_x_left: 16;
1719         uint32_t roi_14_y_top: 16;
1720     } dw43;
1721
1722     struct {
1723         uint32_t roi_14_x_right: 16;
1724         uint32_t roi_14_y_bottom: 16;
1725     } dw44;
1726
1727     struct {
1728         uint32_t roi_14_weight: 16;
1729         uint32_t roi_14_offset: 16;
1730     } dw45;
1731
1732     struct {
1733         uint32_t roi_15_x_left: 16;
1734         uint32_t roi_15_y_top: 16;
1735     } dw46;
1736
1737     struct {
1738         uint32_t roi_15_x_right: 16;
1739         uint32_t roi_15_y_bottom: 16;
1740     } dw47;
1741
1742     struct {
1743         uint32_t roi_15_weight: 16;
1744         uint32_t roi_15_offset: 16;
1745     } dw48;
1746
1747     struct {
1748         uint32_t input_surface;
1749     } dw49;
1750
1751     struct {
1752         uint32_t output_surface;
1753     } dw50;
1754
1755
1756
1757 } gen9_avc_wp_curbe_data;
1758
1759 struct gen_avc_wp_context {
1760     struct i965_gpe_context gpe_contexts;
1761 };
1762
1763 /*
1764 mbenc structure and define
1765 */
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;
1813
1814 typedef struct _gen9_avc_mbenc_curbe_data {
1815     struct {
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;
1825     } dw0;
1826
1827     struct {
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;
1834     } dw1;
1835
1836     struct {
1837         uint32_t max_len_sp: 8;
1838         uint32_t max_num_su: 8;
1839         uint32_t pitch_width: 16;
1840     } dw2;
1841
1842     struct {
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;
1861     } dw3;
1862
1863     struct {
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;
1880     } dw4;
1881
1882     struct {
1883         uint32_t slice_mb_height: 16;
1884         uint32_t ref_width: 8;
1885         uint32_t ref_height: 8;
1886     } dw5;
1887
1888     struct {
1889         uint32_t batch_buffer_end;
1890     } dw6;
1891
1892     struct {
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;
1906     } dw7;
1907
1908     struct {
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;
1913     } dw8;
1914
1915     struct {
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;
1920     } dw9;
1921
1922     struct {
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;
1927     } dw10;
1928
1929     union {
1930         struct {
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;
1935         };
1936         uint32_t value;
1937     } dw11;
1938
1939     struct {
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;
1944     } dw12;
1945
1946     struct {
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;
1951     } dw13;
1952
1953     struct {
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;
1957     } dw14;
1958
1959     struct {
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;
1964     } dw15;
1965
1966     struct {
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;
1971     } dw16;
1972
1973     struct {
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;
1978     } dw17;
1979
1980     struct {
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;
1985     } dw18;
1986
1987     struct {
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;
1992     } dw19;
1993
1994     struct {
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;
1999     } dw20;
2000
2001     struct {
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;
2006     } dw21;
2007
2008     struct {
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;
2013     } dw22;
2014
2015     struct {
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;
2020     } dw23;
2021
2022     struct {
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;
2027     } dw24;
2028
2029     struct {
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;
2034     } dw25;
2035
2036     struct {
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;
2041     } dw26;
2042
2043     struct {
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;
2048     } dw27;
2049
2050     struct {
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;
2055     } dw28;
2056
2057     struct {
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;
2062     } dw29;
2063
2064     struct {
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;
2069     } dw30;
2070
2071     struct {
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;
2076     } dw31;
2077
2078     struct {
2079         uint32_t skip_val: 16;
2080         uint32_t mult_pred_l0_disable: 8;
2081         uint32_t mult_pred_l1_disable: 8;
2082     } dw32;
2083
2084     struct {
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;
2089     } dw33;
2090
2091     struct {
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;
2121     } dw34;
2122
2123     struct {
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;
2127     } dw35;
2128
2129     struct {
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;
2137     } dw36;
2138
2139     struct {
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;
2149     } dw37;
2150
2151     /* reserved */
2152     struct {
2153         uint32_t max_len_sp: 8;
2154         uint32_t max_num_su: 8;
2155         uint32_t ref_threshold: 16;
2156     } dw38;
2157
2158     struct {
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;
2163     } dw39;
2164
2165     struct {
2166         uint32_t dist_scale_factor_ref_id0_list0: 16;
2167         uint32_t dist_scale_factor_ref_id1_list0: 16;
2168     } dw40;
2169
2170     struct {
2171         uint32_t dist_scale_factor_ref_id2_list0: 16;
2172         uint32_t dist_scale_factor_ref_id3_list0: 16;
2173     } dw41;
2174
2175     struct {
2176         uint32_t dist_scale_factor_ref_id4_list0: 16;
2177         uint32_t dist_scale_factor_ref_id5_list0: 16;
2178     } dw42;
2179
2180     struct {
2181         uint32_t dist_scale_factor_ref_id6_list0: 16;
2182         uint32_t dist_scale_factor_ref_id7_list0: 16;
2183     } dw43;
2184
2185     struct {
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;
2190     } dw44;
2191
2192     struct {
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;
2197     } dw45;
2198
2199     struct {
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;
2203     } dw46;
2204
2205     struct {
2206         uint32_t mb_qp_read_factor: 8;
2207         uint32_t intra_cost_sf: 8;
2208         uint32_t max_vmv_r: 16;
2209     } dw47;
2210
2211     struct {
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;
2215     } dw48;
2216
2217     struct {
2218         uint32_t roi_1_x_left: 16;
2219         uint32_t roi_1_y_top: 16;
2220     } dw49;
2221
2222     struct {
2223         uint32_t roi_1_x_right: 16;
2224         uint32_t roi_1_y_bottom: 16;
2225     } dw50;
2226
2227     struct {
2228         uint32_t roi_2_x_left: 16;
2229         uint32_t roi_2_y_top: 16;
2230     } dw51;
2231
2232     struct {
2233         uint32_t roi_2_x_right: 16;
2234         uint32_t roi_2_y_bottom: 16;
2235     } dw52;
2236
2237     struct {
2238         uint32_t roi_3_x_left: 16;
2239         uint32_t roi_3_y_top: 16;
2240     } dw53;
2241
2242     struct {
2243         uint32_t roi_3_x_right: 16;
2244         uint32_t roi_3_y_bottom: 16;
2245     } dw54;
2246
2247     struct {
2248         uint32_t roi_4_x_left: 16;
2249         uint32_t roi_4_y_top: 16;
2250     } dw55;
2251
2252     struct {
2253         uint32_t roi_4_x_right: 16;
2254         uint32_t roi_4_y_bottom: 16;
2255     } dw56;
2256
2257     struct {
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;
2262     } dw57;
2263
2264     struct {
2265         uint32_t mb_texture_threshold: 16;
2266         uint32_t tx_decision_threshold: 16;
2267     } dw58;
2268
2269     struct {
2270         uint32_t hme_mv_cost_scaling_factor: 8;
2271         uint32_t reserved0: 24;
2272     } dw59;
2273
2274     struct {
2275         uint32_t reserved;
2276     } dw60;
2277
2278     struct {
2279         uint32_t reserved;
2280     } dw61;
2281
2282     struct {
2283         uint32_t reserved;
2284     } dw62;
2285
2286     struct {
2287         uint32_t reserved;
2288     } dw63;
2289
2290     struct {
2291         uint32_t mb_data_surf_index;
2292     } dw64;
2293
2294     struct {
2295         uint32_t mv_data_surf_index;
2296     } dw65;
2297
2298     struct {
2299         uint32_t i_dist_surf_index;
2300     } dw66;
2301
2302     struct {
2303         uint32_t src_y_surf_index;
2304     } dw67;
2305
2306     struct {
2307         uint32_t mb_specific_data_surf_index;
2308     } dw68;
2309
2310     struct {
2311         uint32_t aux_vme_out_surf_index;
2312     } dw69;
2313
2314     struct {
2315         uint32_t curr_ref_pic_sel_surf_index;
2316     } dw70;
2317
2318     struct {
2319         uint32_t hme_mv_pred_fwd_bwd_surf_index;
2320     } dw71;
2321
2322     struct {
2323         uint32_t hme_dist_surf_index;
2324     } dw72;
2325
2326     struct {
2327         uint32_t slice_map_surf_index;
2328     } dw73;
2329
2330     struct {
2331         uint32_t fwd_frm_mb_data_surf_index;
2332     } dw74;
2333
2334     struct {
2335         uint32_t fwd_frm_mv_surf_index;
2336     } dw75;
2337
2338     struct {
2339         uint32_t mb_qp_buffer;
2340     } dw76;
2341
2342     struct {
2343         uint32_t mb_brc_lut;
2344     } dw77;
2345
2346     struct {
2347         uint32_t vme_inter_prediction_surf_index;
2348     } dw78;
2349
2350     struct {
2351         uint32_t vme_inter_prediction_mr_surf_index;
2352     } dw79;
2353
2354     struct {
2355         uint32_t mb_stats_surf_index;
2356     } dw80;
2357
2358     struct {
2359         uint32_t mad_surf_index;
2360     } dw81;
2361
2362     struct {
2363         uint32_t force_non_skip_mb_map_surface;
2364     } dw82;
2365
2366     struct {
2367         uint32_t widi_wa_surf_index;
2368     } dw83;
2369
2370     struct {
2371         uint32_t brc_curbe_surf_index;
2372     } dw84;
2373
2374     struct {
2375         uint32_t static_detection_cost_table_index;
2376     } dw85;
2377
2378     struct {
2379         uint32_t reserved0;
2380     } dw86;
2381
2382     struct {
2383         uint32_t reserved0;
2384     } dw87;
2385
2386 } gen9_avc_mbenc_curbe_data;
2387
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
2398
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 */
2402     struct {
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;
2412     } dw0;
2413
2414     /* dw1: M1.1 defined in the VME message header/payload */
2415     struct {
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;
2422     } dw1;
2423     /* dw2: lower 16bits in M1.2 defined in the VME message header/payload */
2424     struct {
2425         uint32_t max_len_sp: 8;
2426         uint32_t max_num_su: 8;
2427         uint32_t pic_width: 16;
2428     } dw2;
2429
2430     /* dw3: M0.3 defined in the VME message header/payload */
2431     struct {
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;
2451     } dw3;
2452
2453     /* dw4 */
2454     struct {
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;
2471     } dw4;
2472
2473     /* dw5: M0.5 defined in the VME message header/payload */
2474     struct {
2475         uint32_t slice_mb_height: 16;
2476         uint32_t ref_width: 8;
2477         uint32_t ref_height: 8;
2478     } dw5;
2479
2480     /* dw6 */
2481     struct {
2482         uint32_t batch_buffer_end: 32;
2483     } dw6;
2484
2485     /* dw7:  M1.7 defined in the VME message header/payload */
2486     struct {
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;
2500     } dw7;
2501
2502     /* dw8 */
2503     struct {
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;
2508     } dw8;
2509
2510     /* dw9 */
2511     struct {
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;
2516     } dw9;
2517
2518     /* dw10 */
2519     struct {
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;
2524     } dw10;
2525
2526     /* dw11 */
2527     union {
2528         struct {
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;
2533         };
2534         uint32_t value;
2535     } dw11;
2536
2537     /* dw12 */
2538     struct {
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;
2543     } dw12;
2544
2545     /* dw13 */
2546     struct {
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;
2551     } dw13;
2552
2553     struct {
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;
2557     } dw14;
2558
2559     struct {
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;
2564     } dw15;
2565
2566     struct {
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;
2571     } dw16;
2572
2573     struct {
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;
2578     } dw17;
2579
2580     struct {
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;
2585     } dw18;
2586
2587     struct {
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;
2592     } dw19;
2593
2594     struct {
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;
2599     } dw20;
2600
2601     struct {
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;
2606     } dw21;
2607
2608     struct {
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;
2613     } dw22;
2614
2615     struct {
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;
2620     } dw23;
2621
2622     struct {
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;
2627     } dw24;
2628
2629     struct {
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;
2634     } dw25;
2635
2636     struct {
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;
2641     } dw26;
2642
2643     struct {
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;
2648     } dw27;
2649
2650     struct {
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;
2655     } dw28;
2656
2657     struct {
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;
2662     } dw29;
2663
2664     struct {
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;
2669     } dw30;
2670
2671     struct {
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;
2676     } dw31;
2677
2678     struct {
2679         uint32_t skip_val: 16;
2680         uint32_t mult_pred_l0_disable: 8;
2681         uint32_t mult_pred_l1_disable: 8;
2682     } dw32;
2683
2684     struct {
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;
2689     } dw33;
2690
2691     struct {
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;
2721     } dw34;
2722
2723     struct {
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;
2727     } dw35;
2728
2729     struct {
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;
2737     } dw36;
2738
2739     struct {
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;
2749     } dw37;
2750
2751     /* reserved */
2752     struct {
2753         uint32_t max_len_sp: 8;
2754         uint32_t max_num_su: 8;
2755         uint32_t ref_threshold: 16;
2756     } dw38;
2757
2758     struct {
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;
2763     } dw39;
2764
2765     struct {
2766         uint32_t dist_scale_factor_ref_id0_list0: 16;
2767         uint32_t dist_scale_factor_ref_id1_list0: 16;
2768     } dw40;
2769
2770     struct {
2771         uint32_t dist_scale_factor_ref_id2_list0: 16;
2772         uint32_t dist_scale_factor_ref_id3_list0: 16;
2773     } dw41;
2774
2775     struct {
2776         uint32_t dist_scale_factor_ref_id4_list0: 16;
2777         uint32_t dist_scale_factor_ref_id5_list0: 16;
2778     } dw42;
2779
2780     struct {
2781         uint32_t dist_scale_factor_ref_id6_list0: 16;
2782         uint32_t dist_scale_factor_ref_id7_list0: 16;
2783     } dw43;
2784
2785     struct {
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;
2790     } dw44;
2791
2792     struct {
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;
2797     } dw45;
2798
2799     struct {
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;
2803     } dw46;
2804
2805     struct {
2806         uint32_t mb_qp_read_factor: 8;
2807         uint32_t intra_cost_sf: 8;
2808         uint32_t max_vmv_r: 16;
2809     } dw47;
2810
2811     struct {
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;
2815     } dw48;
2816
2817     struct {
2818         uint32_t roi_1_x_left: 16;
2819         uint32_t roi_1_y_top: 16;
2820     } dw49;
2821
2822     struct {
2823         uint32_t roi_1_x_right: 16;
2824         uint32_t roi_1_y_bottom: 16;
2825     } dw50;
2826
2827     struct {
2828         uint32_t roi_2_x_left: 16;
2829         uint32_t roi_2_y_top: 16;
2830     } dw51;
2831
2832     struct {
2833         uint32_t roi_2_x_right: 16;
2834         uint32_t roi_2_y_bottom: 16;
2835     } dw52;
2836
2837     struct {
2838         uint32_t roi_3_x_left: 16;
2839         uint32_t roi_3_y_top: 16;
2840     } dw53;
2841
2842     struct {
2843         uint32_t roi_3_x_right: 16;
2844         uint32_t roi_3_y_bottom: 16;
2845     } dw54;
2846
2847     struct {
2848         uint32_t roi_4_x_left: 16;
2849         uint32_t roi_4_y_top: 16;
2850     } dw55;
2851
2852     struct {
2853         uint32_t roi_4_x_right: 16;
2854         uint32_t roi_4_y_bottom: 16;
2855     } dw56;
2856
2857     struct {
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;
2862     } dw57;
2863
2864     struct {
2865         uint32_t mb_texture_threshold: 16;
2866         uint32_t tx_decision_threshold: 16;
2867     } dw58;
2868
2869     struct {
2870         uint32_t hme_mv_cost_scaling_factor: 8;
2871         uint32_t reserved0: 24;
2872     } dw59;
2873
2874     struct {
2875         uint32_t reserved;
2876     } dw60;
2877
2878     struct {
2879         uint32_t reserved;
2880     } dw61;
2881
2882     struct {
2883         uint32_t reserved;
2884     } dw62;
2885
2886     struct {
2887         uint32_t reserved;
2888     } dw63;
2889
2890     /* dw64 */
2891     struct {
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;
2901     } dw64;
2902
2903     /* dw65 */
2904     struct {
2905         uint32_t reserved: 32;
2906     } dw65;
2907
2908     /* dw66 */
2909     struct {
2910         uint32_t reserved: 32;
2911     } dw66;
2912
2913     /* dw67 */
2914     struct {
2915         uint32_t reserved: 32;
2916     } dw67;
2917
2918     /* dw68 */
2919     struct {
2920         uint32_t reserved: 32;
2921     } dw68;
2922
2923     /* dw69 */
2924     struct {
2925         uint32_t reserved: 32;
2926     } dw69;
2927
2928     /* dw70 */
2929     struct {
2930         uint32_t reserved: 32;
2931     } dw70;
2932
2933     /* dw71 */
2934     struct {
2935         uint32_t reserved: 32;
2936     } dw71;
2937
2938     /* dw72 */
2939     struct {
2940         uint32_t reserved: 32;
2941     } dw72;
2942
2943     /* dw73 */
2944     struct {
2945         uint32_t reserved: 32;
2946     } dw73;
2947
2948     /* dw74 */
2949     struct {
2950         uint32_t reserved: 32;
2951     } dw74;
2952
2953     /* dw75 */
2954     struct {
2955         uint32_t reserved: 32;
2956     } dw75;
2957
2958     /* dw76 */
2959     struct {
2960         uint32_t reserved: 32;
2961     } dw76;
2962
2963     /* dw77 */
2964     struct {
2965         uint32_t reserved: 32;
2966     } dw77;
2967
2968     /* dw78 */
2969     struct {
2970         uint32_t reserved: 32;
2971     } dw78;
2972
2973     /* dw79 */
2974     struct {
2975         uint32_t reserved: 32;
2976     } dw79;
2977
2978     /* dw80 */
2979     struct {
2980         uint32_t mb_data_surf_index: 32;
2981     } dw80;
2982
2983     /* dw81 */
2984     struct {
2985         uint32_t mv_data_surf_index: 32;
2986     } dw81;
2987
2988     /* dw82 */
2989     struct {
2990         uint32_t i_dist_surf_index: 32;
2991     } dw82;
2992
2993     /* dw83 */
2994     struct {
2995         uint32_t src_y_surf_index: 32;
2996     } dw83;
2997
2998     /* dw84 */
2999     struct {
3000         uint32_t mb_specific_data_surf_index: 32;
3001     } dw84;
3002
3003     /* dw85 */
3004     struct {
3005         uint32_t aux_vme_out_surf_index: 32;
3006     } dw85;
3007
3008     /* dw86 */
3009     struct {
3010         uint32_t curr_ref_pic_sel_surf_index: 32;
3011     } dw86;
3012
3013     /* dw87 */
3014     struct {
3015         uint32_t hme_mv_pred_fwd_bwd_surf_index: 32;
3016     } dw87;
3017
3018     /* dw88 */
3019     struct {
3020         uint32_t hme_dist_surf_index: 32;
3021     } dw88;
3022
3023     /* dw89 */
3024     struct {
3025         uint32_t slice_map_surf_index: 32;
3026     } dw89;
3027
3028     /* dw90 */
3029     struct {
3030         uint32_t fwd_frm_mb_data_surf_index: 32;
3031     } dw90;
3032
3033     /* dw91 */
3034     struct {
3035         uint32_t fwd_frm_mv_surf_index: 32;
3036     } dw91;
3037
3038     /* dw92 */
3039     struct {
3040         uint32_t mb_qp_buffer: 32;
3041     } dw92;
3042
3043     /* dw93 */
3044     struct {
3045         uint32_t mb_brc_lut: 32;
3046     } dw93;
3047
3048     /* dw94 */
3049     struct {
3050         uint32_t vme_inter_prediction_surf_index: 32;
3051     } dw94;
3052
3053     /* dw95 */
3054     struct {
3055         uint32_t vme_inter_prediction_mr_surf_index: 32;
3056     } dw95;
3057
3058     /* dw96 */
3059     struct {
3060         uint32_t mb_stats_surf_index: 32;
3061     } dw96;
3062
3063     /* dw97 */
3064     struct {
3065         uint32_t mad_surf_index: 32;
3066     } dw97;
3067
3068     /* dw98 */
3069     struct {
3070         uint32_t force_non_skip_mb_map_surface: 32;
3071     } dw98;
3072
3073     /* dw99 */
3074     struct {
3075         uint32_t widi_wa_surf_index: 32;
3076     } dw99;
3077
3078     /* dw100 */
3079     struct {
3080         uint32_t brc_curbe_surf_index: 32;
3081     } dw100;
3082
3083     /* dw101 */
3084     struct {
3085         uint32_t static_detection_cost_table_index: 32;
3086     } dw101;
3087
3088     /* dw102 */
3089     struct {
3090         uint32_t fei_mv_predictor_surf_index: 32;
3091     } dw102;
3092
3093     /* dw103 */
3094     struct {
3095         uint32_t reserved: 32;
3096     } dw103;
3097
3098 } gen9_avc_fei_mbenc_curbe_data;
3099
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
3105
3106 struct gen_avc_mbenc_context {
3107     struct i965_gpe_context gpe_contexts[NUM_GEN9_AVC_KERNEL_MBENC];
3108 };
3109
3110 /*
3111 static frame detection structure and define
3112 */
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;
3121
3122 typedef struct _gen9_avc_sfd_curbe_data {
3123     struct {
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;
3133     } dw0;
3134
3135     struct {
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;
3140     } dw1;
3141
3142     struct {
3143         uint32_t frame_width_in_mbs: 16;
3144         uint32_t frame_height_in_mbs: 16;
3145     } dw2;
3146
3147     struct {
3148         uint32_t large_mv_threshold;
3149     } dw3;
3150
3151     struct {
3152         uint32_t total_large_mv_threshold;
3153     } dw4;
3154
3155     struct {
3156         uint32_t zmv_threshold;
3157     } dw5;
3158
3159     struct {
3160         uint32_t total_zmv_threshold;
3161     } dw6;
3162
3163     struct {
3164         uint32_t min_dist_threshold;
3165     } dw7;
3166
3167     char cost_table[52];
3168     struct {
3169         uint32_t actual_width_in_mb: 16;
3170         uint32_t actual_height_in_mb: 16;
3171     } dw21;
3172
3173     struct {
3174         uint32_t reserved;
3175     } dw22;
3176
3177     struct {
3178         uint32_t reserved;
3179     } dw23;
3180
3181     struct {
3182         uint32_t vdenc_input_image_state_index;
3183     } dw24;
3184
3185     struct {
3186         uint32_t reserved;
3187     } dw25;
3188
3189     struct {
3190         uint32_t mv_data_surface_index;
3191     } dw26;
3192
3193     struct {
3194         uint32_t inter_distortion_surface_index;
3195     } dw27;
3196
3197     struct {
3198         uint32_t output_data_surface_index;
3199     } dw28;
3200
3201     struct {
3202         uint32_t vdenc_output_image_state_index;
3203     } dw29;
3204
3205 } gen9_avc_sfd_curbe_data;
3206
3207 struct gen_avc_sfd_context {
3208     struct i965_gpe_context gpe_contexts;
3209 };
3210
3211 struct gen_avc_preproc_context {
3212     struct i965_gpe_context gpe_contexts;
3213 };
3214
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;
3233
3234 /* preenc preproc curbe data */
3235 typedef struct _gen9_avc_preproc_curbe_data {
3236     struct {
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;
3246     } dw0;
3247
3248     struct {
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;
3255     } dw1;
3256
3257     struct {
3258         uint32_t max_len_sp: 8;
3259         uint32_t max_num_su: 8;
3260         uint32_t pic_width: 16;
3261     } dw2;
3262
3263     struct {
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;
3282     } dw3;
3283
3284     struct {
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;
3300     } dw4;
3301
3302     struct {
3303         uint32_t slice_mb_height: 16;
3304         uint32_t ref_width: 8;
3305         uint32_t ref_height: 8;
3306     } dw5;
3307
3308     struct {
3309         uint32_t pic_height: 16;
3310         uint32_t reserved: 16;
3311     } dw6;
3312
3313     struct {
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;
3327     } dw7;
3328
3329     struct {
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;
3334     } dw8;
3335
3336     struct {
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;
3341     } dw9;
3342     struct {
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;
3347     } dw10;
3348
3349     struct {
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;
3354     } dw11;
3355     struct {
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;
3360     } dw12;
3361
3362     struct {
3363         uint32_t reserved;
3364     } dw13;
3365
3366     struct {
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;
3370     } dw14;
3371
3372     struct {
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;
3377     } dw15;
3378
3379     struct {
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;
3384     } dw16;
3385
3386     struct {
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;
3391     } dw17;
3392
3393     struct {
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;
3398     } dw18;
3399     struct {
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;
3404     } dw19;
3405
3406     struct {
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;
3411     } dw20;
3412
3413     struct {
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;
3418     } dw21;
3419
3420
3421     struct {
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;
3426     } dw22;
3427
3428     struct {
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;
3433     } dw23;
3434
3435     struct {
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;
3440     } dw24;
3441
3442     struct {
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;
3447     } dw25;
3448
3449
3450     struct {
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;
3455     } dw26;
3456
3457     struct {
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;
3462     } dw27;
3463
3464
3465     struct {
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;
3470     } dw28;
3471
3472     struct {
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;
3477     } dw29;
3478
3479     struct {
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;
3484     } dw30;
3485
3486     struct {
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;
3491     } dw31;
3492
3493     struct {
3494         uint32_t max_vmv_r: 16;
3495         uint32_t reserved: 16;
3496     } dw32;
3497
3498     struct {
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;
3503     } dw33;
3504
3505     struct {
3506         uint32_t reserved;
3507     } dw34;
3508
3509     struct {
3510         uint32_t reserved;
3511     } dw35;
3512
3513     struct {
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;
3518     } dw36;
3519
3520     struct {
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;
3530     } dw37;
3531
3532     struct {
3533         uint32_t max_len_sp: 8;
3534         uint32_t max_num_su: 8;
3535         uint32_t ref_threshold: 16;
3536     } dw38;
3537
3538     struct {
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;
3543     } dw39;
3544
3545
3546     struct {
3547         uint32_t curr_pic_surf_index;
3548     } dw40;
3549
3550     struct {
3551         uint32_t hme_mv_dat_surf_index;
3552     } dw41;
3553
3554     struct {
3555         uint32_t mv_predictor_surf_index;
3556     } dw42;
3557
3558     struct {
3559         uint32_t mb_qp_surf_index;
3560     } dw43;
3561
3562     struct {
3563         uint32_t mv_data_out_surf_index;
3564     } dw44;
3565
3566     struct {
3567         uint32_t mb_stats_out_surf_index;
3568     } dw45;
3569
3570     struct {
3571         uint32_t vme_inter_prediction_surf_index;
3572     } dw46;
3573
3574     struct {
3575         uint32_t vme_Inter_prediction_mr_surf_index;
3576     } dw47;
3577
3578     struct {
3579         uint32_t ftq_lut_surf_index;
3580     } dw48;
3581
3582 } gen9_avc_preproc_curbe_data;
3583
3584 /* Gen95 */
3585
3586 typedef struct _gen95_avc_scaling4x_curbe_data {
3587     struct {
3588         uint32_t   input_picture_width  : 16;
3589         uint32_t   input_picture_height : 16;
3590     } dw0;
3591
3592     struct {
3593         uint32_t   input_y_bti_frame;
3594     } dw1;
3595
3596     struct {
3597         uint32_t   output_y_bti_frame;
3598     } dw2;
3599
3600     struct {
3601         uint32_t reserved;
3602     } dw3;
3603
3604     struct {
3605         uint32_t reserved;
3606     } dw4;
3607
3608     struct {
3609         uint32_t flatness_threshold;
3610     } dw5;
3611
3612     struct {
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;
3618     } dw6;
3619
3620     struct {
3621         uint32_t reserved;
3622     } dw7;
3623
3624     struct {
3625         uint32_t mbv_proc_stat_bti_frame;
3626     } dw8;
3627
3628     struct {
3629         uint32_t reserved;
3630     } dw9;
3631
3632     struct {
3633         uint32_t reserved;
3634     } dw10;
3635
3636     struct {
3637         uint32_t reserved;
3638     } dw11;
3639
3640     struct {
3641         uint32_t reserved;
3642     } dw12;
3643
3644     struct {
3645         uint32_t reserved;
3646     } dw13;
3647
3648     struct {
3649         uint32_t reserved;
3650     } dw14;
3651
3652     struct {
3653         uint32_t reserved;
3654     } dw15;
3655 } gen95_avc_scaling4x_curbe_data;
3656
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;
3668
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;
3676
3677 typedef struct _gen95_avc_mbenc_curbe_data {
3678     struct {
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;
3688     } dw0;
3689
3690     struct {
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;
3698     } dw1;
3699
3700     struct {
3701         uint32_t max_len_sp: 8;
3702         uint32_t max_num_su: 8;
3703         uint32_t pitch_width: 16;
3704     } dw2;
3705
3706     struct {
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;
3725     } dw3;
3726
3727     struct {
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;
3744     } dw4;
3745
3746     struct {
3747         uint32_t slice_mb_height: 16;
3748         uint32_t ref_width: 8;
3749         uint32_t ref_height: 8;
3750     } dw5;
3751
3752     struct {
3753         uint32_t batch_buffer_end;
3754     } dw6;
3755
3756     struct {
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;
3770     } dw7;
3771
3772     struct {
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;
3777     } dw8;
3778
3779     struct {
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;
3784     } dw9;
3785
3786     struct {
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;
3791     } dw10;
3792
3793     union {
3794         struct {
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;
3799         };
3800         uint32_t value;
3801     } dw11;
3802
3803     struct {
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;
3808     } dw12;
3809
3810     struct {
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;
3815     } dw13;
3816
3817     struct {
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;
3821     } dw14;
3822
3823     struct {
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;
3828     } dw15;
3829
3830     struct {
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;
3835     } dw16;
3836
3837     struct {
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;
3842     } dw17;
3843
3844     struct {
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;
3849     } dw18;
3850
3851     struct {
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;
3856     } dw19;
3857
3858     struct {
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;
3863     } dw20;
3864
3865     struct {
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;
3870     } dw21;
3871
3872     struct {
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;
3877     } dw22;
3878
3879     struct {
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;
3884     } dw23;
3885
3886     struct {
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;
3891     } dw24;
3892
3893     struct {
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;
3898     } dw25;
3899
3900     struct {
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;
3905     } dw26;
3906
3907     struct {
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;
3912     } dw27;
3913
3914     struct {
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;
3919     } dw28;
3920
3921     struct {
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;
3926     } dw29;
3927
3928     struct {
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;
3933     } dw30;
3934
3935     struct {
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;
3940     } dw31;
3941
3942     struct {
3943         uint32_t skip_val: 16;
3944         uint32_t mult_pred_l0_disable: 8;
3945         uint32_t mult_pred_l1_disable: 8;
3946     } dw32;
3947
3948     struct {
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;
3953     } dw33;
3954
3955     struct {
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;
3987     } dw34;
3988
3989     struct {
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;
3993     } dw35;
3994
3995     struct {
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;
4003     } dw36;
4004
4005     struct {
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;
4015     } dw37;
4016
4017     /* reserved */
4018     struct {
4019         uint32_t max_len_sp: 8;
4020         uint32_t max_num_su: 8;
4021         uint32_t ref_threshold: 16;
4022     } dw38;
4023
4024     struct {
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;
4029     } dw39;
4030
4031     struct {
4032         uint32_t dist_scale_factor_ref_id0_list0: 16;
4033         uint32_t dist_scale_factor_ref_id1_list0: 16;
4034     } dw40;
4035
4036     struct {
4037         uint32_t dist_scale_factor_ref_id2_list0: 16;
4038         uint32_t dist_scale_factor_ref_id3_list0: 16;
4039     } dw41;
4040
4041     struct {
4042         uint32_t dist_scale_factor_ref_id4_list0: 16;
4043         uint32_t dist_scale_factor_ref_id5_list0: 16;
4044     } dw42;
4045
4046     struct {
4047         uint32_t dist_scale_factor_ref_id6_list0: 16;
4048         uint32_t dist_scale_factor_ref_id7_list0: 16;
4049     } dw43;
4050
4051     struct {
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;
4056     } dw44;
4057
4058     struct {
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;
4063     } dw45;
4064
4065     struct {
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;
4069     } dw46;
4070
4071     struct {
4072         uint32_t mb_qp_read_factor: 8;
4073         uint32_t intra_cost_sf: 8;
4074         uint32_t max_vmv_r: 16;
4075     } dw47;
4076
4077     struct {
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;
4081     } dw48;
4082
4083     struct {
4084         uint32_t roi_1_x_left: 16;
4085         uint32_t roi_1_y_top: 16;
4086     } dw49;
4087
4088     struct {
4089         uint32_t roi_1_x_right: 16;
4090         uint32_t roi_1_y_bottom: 16;
4091     } dw50;
4092
4093     struct {
4094         uint32_t roi_2_x_left: 16;
4095         uint32_t roi_2_y_top: 16;
4096     } dw51;
4097
4098     struct {
4099         uint32_t roi_2_x_right: 16;
4100         uint32_t roi_2_y_bottom: 16;
4101     } dw52;
4102
4103     struct {
4104         uint32_t roi_3_x_left: 16;
4105         uint32_t roi_3_y_top: 16;
4106     } dw53;
4107
4108     struct {
4109         uint32_t roi_3_x_right: 16;
4110         uint32_t roi_3_y_bottom: 16;
4111     } dw54;
4112
4113     struct {
4114         uint32_t roi_4_x_left: 16;
4115         uint32_t roi_4_y_top: 16;
4116     } dw55;
4117
4118     struct {
4119         uint32_t roi_4_x_right: 16;
4120         uint32_t roi_4_y_bottom: 16;
4121     } dw56;
4122
4123     struct {
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;
4128     } dw57;
4129
4130     union {
4131         struct {
4132             uint32_t lambda_8x8_inter: 16;
4133             uint32_t lambda_8x8_intra: 16;
4134         };
4135         uint32_t value;
4136     } dw58;
4137
4138     union {
4139         struct {
4140             uint32_t lambda_inter: 16;
4141             uint32_t lambda_intra: 16;
4142         };
4143         uint32_t value;
4144     } dw59;
4145
4146     struct {
4147         uint32_t mb_texture_threshold: 16;
4148         uint32_t tx_decision_threshold: 16;
4149     } dw60;
4150
4151     struct {
4152         uint32_t hme_mv_cost_scaling_factor: 8;
4153         uint32_t reserved0: 8;
4154         uint32_t widi_intra_refresh_mb_y: 16;
4155     } dw61;
4156
4157     struct {
4158         uint32_t reserved;
4159     } dw62;
4160
4161     struct {
4162         uint32_t reserved;
4163     } dw63;
4164
4165     struct {
4166         uint32_t reserved;
4167     } dw64;
4168
4169     struct {
4170         uint32_t reserved;
4171     } dw65;
4172
4173     struct {
4174         uint32_t mb_data_surf_index;
4175     } dw66;
4176
4177     struct {
4178         uint32_t mv_data_surf_index;
4179     } dw67;
4180
4181     struct {
4182         uint32_t i_dist_surf_index;
4183     } dw68;
4184
4185     struct {
4186         uint32_t src_y_surf_index;
4187     } dw69;
4188
4189     struct {
4190         uint32_t mb_specific_data_surf_index;
4191     } dw70;
4192
4193     struct {
4194         uint32_t aux_vme_out_surf_index;
4195     } dw71;
4196
4197     struct {
4198         uint32_t curr_ref_pic_sel_surf_index;
4199     } dw72;
4200
4201     struct {
4202         uint32_t hme_mv_pred_fwd_bwd_surf_index;
4203     } dw73;
4204
4205     struct {
4206         uint32_t hme_dist_surf_index;
4207     } dw74;
4208
4209     struct {
4210         uint32_t slice_map_surf_index;
4211     } dw75;
4212
4213     struct {
4214         uint32_t fwd_frm_mb_data_surf_index;
4215     } dw76;
4216
4217     struct {
4218         uint32_t fwd_frm_mv_surf_index;
4219     } dw77;
4220
4221     struct {
4222         uint32_t mb_qp_buffer;
4223     } dw78;
4224
4225     struct {
4226         uint32_t mb_brc_lut;
4227     } dw79;
4228
4229     struct {
4230         uint32_t vme_inter_prediction_surf_index;
4231     } dw80;
4232
4233     struct {
4234         uint32_t vme_inter_prediction_mr_surf_index;
4235     } dw81;
4236
4237     struct {
4238         uint32_t mb_stats_surf_index;
4239     } dw82;
4240
4241     struct {
4242         uint32_t mad_surf_index;
4243     } dw83;
4244
4245     struct {
4246         uint32_t brc_curbe_surf_index;
4247     } dw84;
4248
4249     struct {
4250         uint32_t force_non_skip_mb_map_surface;
4251     } dw85;
4252
4253     struct {
4254         uint32_t widi_wa_surf_index;
4255     } dw86;
4256
4257     struct {
4258         uint32_t static_detection_cost_table_index;
4259     } dw87;
4260
4261 } gen95_avc_mbenc_curbe_data;
4262
4263 typedef struct _gen8_avc_encoder_kernel_header {
4264     int nKernelCount;
4265
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;
4282
4283     // HME
4284     kernel_header me_p;
4285     kernel_header me_b;
4286
4287     // DownScaling
4288     kernel_header ply_dscale_ply;
4289     kernel_header ply_dscale_2f_ply_2f;
4290     // BRC Init frame
4291     kernel_header frame_brc_init;
4292
4293     // FrameBRC Update
4294     kernel_header frame_brc_update;
4295
4296     // BRC Reset frame
4297     kernel_header frame_brc_reset;
4298
4299     // BRC I Frame Distortion
4300     kernel_header frame_brc_i_dist;
4301
4302     //BRC Block Copy
4303     kernel_header brc_block_copy;
4304
4305     // 2x DownScaling
4306     kernel_header ply_2xdscale_ply;
4307     kernel_header ply_2xdscale_2f_ply_2f;
4308
4309     // Static frame detection Kernel
4310     kernel_header static_detection;
4311 } gen8_avc_encoder_kernel_header;
4312
4313 struct gen8_mfx_avc_img_state {
4314     union {
4315         struct {
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;
4322         };
4323
4324         uint32_t value;
4325     } dw0;
4326
4327     struct {
4328         uint32_t frame_size_in_mbs: 16; //minus1
4329         uint32_t pad0: 16;
4330     } dw1;
4331
4332     struct {
4333         uint32_t frame_width_in_mbs_minus1: 8; //minus1
4334         uint32_t pad0: 8;
4335         uint32_t frame_height_in_mbs_minus1: 8; //minus1
4336         uint32_t pad1: 8;
4337     } dw2;
4338
4339     struct {
4340         uint32_t pad0: 8;
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;
4346         uint32_t pad1: 1;
4347         uint32_t chroma_qp_offset: 5;
4348         uint32_t pad3: 3;
4349         uint32_t second_chroma_qp_offset: 5;
4350         uint32_t pad4: 3;
4351     } dw3;
4352
4353     struct {
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;
4363         uint32_t pad0: 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;
4370     } dw4;
4371
4372     struct {
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;
4377         uint32_t pad0: 3;
4378         uint32_t intra_mb_ipcm_flag: 1;
4379         uint32_t pad1: 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
4383         uint32_t pad2: 3;
4384         uint32_t non_first_pass_flag: 1;
4385         uint32_t pad3: 10;
4386         uint32_t aq_chroma_disable: 1;
4387         uint32_t aq_rounding: 3;
4388         uint32_t aq_enable: 1;
4389     } dw5;
4390
4391     struct {
4392         uint32_t intra_mb_max_size: 12;
4393         uint32_t pad0: 4;
4394         uint32_t inter_mb_max_size: 12;
4395         uint32_t pad1: 4;
4396     } dw6;
4397
4398     struct {
4399         uint32_t pad0: 32;
4400     } dw7;
4401
4402     struct {
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;
4407     } dw8;
4408
4409     struct {
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;
4414     } dw9;
4415
4416     struct {
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;
4423     } dw10;
4424
4425     struct {
4426         uint32_t frame_bitrate_min_delta: 15;
4427         uint32_t pad0: 1;
4428         uint32_t frame_bitrate_max_delta: 15;
4429         uint32_t pad1: 1;
4430     } dw11;
4431
4432     struct {
4433         uint32_t pad0: 32;
4434     } dw12;
4435
4436     struct {
4437         uint32_t pic_qp_init_minus26: 8;
4438         uint32_t pic_num_ref_idx_l0_active_minus1: 6;
4439         uint32_t pad0: 2;
4440         uint32_t pic_num_ref_idx_l1_active_minus1: 6;
4441         uint32_t pad1: 2;
4442         uint32_t num_ref_frames: 5;
4443         uint32_t is_curr_pic_has_mmco5: 1;
4444         uint32_t pad2: 2;
4445     } dw13;
4446
4447     struct {
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;
4451         uint32_t pad0: 4;
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;
4458     } dw14;
4459
4460     struct {
4461         uint32_t slice_group_change_rate: 16;
4462         uint32_t curr_pic_frame_num: 16;
4463     } dw15;
4464
4465     struct {
4466         uint32_t current_frame_view_id: 10;
4467         uint32_t pad0: 2;
4468         uint32_t max_view_idx_l0: 4;
4469         uint32_t pad1: 2;
4470         uint32_t max_view_idx_l1: 4;
4471         uint32_t pad2: 9;
4472         uint32_t inter_view_order_disable: 1;
4473     } dw16;
4474 };
4475
4476
4477
4478 typedef struct _gen8_avc_mbenc_curbe_data {
4479     struct {
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;
4489     } dw0;
4490
4491     struct {
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;
4498     } dw1;
4499
4500     struct {
4501         uint32_t max_len_sp: 8;
4502         uint32_t max_num_su: 8;
4503         uint32_t pitch_width: 16;
4504     } dw2;
4505
4506     struct {
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;
4525     } dw3;
4526
4527     struct {
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;
4544     } dw4;
4545
4546     struct {
4547         uint32_t slice_mb_height: 16;
4548         uint32_t ref_width: 8;
4549         uint32_t ref_height: 8;
4550     } dw5;
4551
4552     struct {
4553         uint32_t batch_buffer_end;
4554     } dw6;
4555
4556     struct {
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;
4570     } dw7;
4571
4572     struct {
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;
4577     } dw8;
4578
4579     struct {
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;
4584     } dw9;
4585
4586     struct {
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;
4591     } dw10;
4592
4593     union {
4594         struct {
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;
4599         };
4600         uint32_t value;
4601     } dw11;
4602
4603     struct {
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;
4608     } dw12;
4609
4610     struct {
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;
4615     } dw13;
4616
4617     struct {
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;
4621     } dw14;
4622
4623     struct {
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;
4628     } dw15;
4629
4630     struct {
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;
4635     } dw16;
4636
4637     struct {
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;
4642     } dw17;
4643
4644     struct {
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;
4649     } dw18;
4650
4651     struct {
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;
4656     } dw19;
4657
4658     struct {
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;
4663     } dw20;
4664
4665     struct {
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;
4670     } dw21;
4671
4672     struct {
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;
4677     } dw22;
4678
4679     struct {
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;
4684     } dw23;
4685
4686     struct {
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;
4691     } dw24;
4692
4693     struct {
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;
4698     } dw25;
4699
4700     struct {
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;
4705     } dw26;
4706
4707     struct {
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;
4712     } dw27;
4713
4714     struct {
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;
4719     } dw28;
4720
4721     struct {
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;
4726     } dw29;
4727
4728     struct {
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;
4733     } dw30;
4734
4735     struct {
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;
4740     } dw31;
4741
4742     struct {
4743         uint32_t skip_val: 16;
4744         uint32_t mult_pred_l0_disable: 8;
4745         uint32_t mult_pred_l1_disable: 8;
4746     } dw32;
4747
4748     struct {
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;
4753     } dw33;
4754
4755     struct {
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;
4782     } dw34;
4783
4784     struct {
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;
4788     } dw35;
4789
4790     struct {
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;
4799     } dw36;
4800
4801     struct {
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;
4811     } dw37;
4812
4813     /* reserved */
4814     struct {
4815         uint32_t max_len_sp: 8;
4816         uint32_t max_num_su: 8;
4817         uint32_t ref_threshold: 16;
4818     } dw38;
4819
4820     struct {
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;
4825     } dw39;
4826
4827     struct {
4828         uint32_t dist_scale_factor_ref_id0_list0: 16;
4829         uint32_t dist_scale_factor_ref_id1_list0: 16;
4830     } dw40;
4831
4832     struct {
4833         uint32_t dist_scale_factor_ref_id2_list0: 16;
4834         uint32_t dist_scale_factor_ref_id3_list0: 16;
4835     } dw41;
4836
4837     struct {
4838         uint32_t dist_scale_factor_ref_id4_list0: 16;
4839         uint32_t dist_scale_factor_ref_id5_list0: 16;
4840     } dw42;
4841
4842     struct {
4843         uint32_t dist_scale_factor_ref_id6_list0: 16;
4844         uint32_t dist_scale_factor_ref_id7_list0: 16;
4845     } dw43;
4846
4847     struct {
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;
4852     } dw44;
4853
4854     struct {
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;
4859     } dw45;
4860
4861     struct {
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;
4865     } dw46;
4866
4867     struct {
4868         uint32_t mb_qp_read_factor: 8;
4869         uint32_t intra_cost_sf: 8;
4870         uint32_t max_vmv_r: 16;
4871     } dw47;
4872
4873     struct {
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;
4877     } dw48;
4878
4879     struct {
4880         uint32_t roi_1_x_left: 16;
4881         uint32_t roi_1_y_top: 16;
4882     } dw49;
4883
4884     struct {
4885         uint32_t roi_1_x_right: 16;
4886         uint32_t roi_1_y_bottom: 16;
4887     } dw50;
4888
4889     struct {
4890         uint32_t roi_2_x_left: 16;
4891         uint32_t roi_2_y_top: 16;
4892     } dw51;
4893
4894     struct {
4895         uint32_t roi_2_x_right: 16;
4896         uint32_t roi_2_y_bottom: 16;
4897     } dw52;
4898
4899     struct {
4900         uint32_t roi_3_x_left: 16;
4901         uint32_t roi_3_y_top: 16;
4902     } dw53;
4903
4904     struct {
4905         uint32_t roi_3_x_right: 16;
4906         uint32_t roi_3_y_bottom: 16;
4907     } dw54;
4908
4909     struct {
4910         uint32_t roi_4_x_left: 16;
4911         uint32_t roi_4_y_top: 16;
4912     } dw55;
4913
4914     struct {
4915         uint32_t roi_4_x_right: 16;
4916         uint32_t roi_4_y_bottom: 16;
4917     } dw56;
4918
4919     struct {
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;
4924     } dw57;
4925
4926     struct {
4927         uint32_t hme_mv_cost_scaling_factor: 8;
4928         int32_t reserved0: 8;
4929         int32_t widi_intra_refresh_mby: 16;
4930     } dw58;
4931
4932     struct {
4933         uint32_t reserved;
4934     } dw59;
4935
4936     struct {
4937         uint32_t cabac_wa_zone0_threshold: 16;
4938         uint32_t cabac_wa_zone1_threshold: 16;
4939     } dw60;
4940
4941     struct {
4942         uint32_t cabac_wa_zone2_threshold: 16;
4943         uint32_t cabac_wa_zone3_threshold: 16;
4944     } dw61;
4945
4946     struct {
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;
4951     } dw62;
4952
4953     struct {
4954         uint32_t reserved;
4955     } dw63;
4956
4957     struct {
4958         uint32_t reserved;
4959     } dw64;
4960
4961     struct {
4962         uint32_t mb_data_surf_index;
4963     } dw65;
4964
4965     struct {
4966         uint32_t mv_data_surf_index;
4967     } dw66;
4968
4969     struct {
4970         uint32_t i_dist_surf_index;
4971     } dw67;
4972
4973     struct {
4974         uint32_t src_y_surf_index;
4975     } dw68;
4976
4977     struct {
4978         uint32_t mb_specific_data_surf_index;
4979     } dw69;
4980
4981     struct {
4982         uint32_t aux_vme_out_surf_index;
4983     } dw70;
4984
4985     struct {
4986         uint32_t curr_ref_pic_sel_surf_index;
4987     } dw71;
4988
4989     struct {
4990         uint32_t hme_mv_pred_fwd_bwd_surf_index;
4991     } dw72;
4992
4993     struct {
4994         uint32_t hme_dist_surf_index;
4995     } dw73;
4996
4997     struct {
4998         uint32_t slice_map_surf_index;
4999     } dw74;
5000
5001     struct {
5002         uint32_t fwd_frm_mb_data_surf_index;
5003     } dw75;
5004
5005     struct {
5006         uint32_t fwd_frm_mv_surf_index;
5007     } dw76;
5008
5009     struct {
5010         uint32_t mb_qp_buffer;
5011     } dw77;
5012
5013     struct {
5014         uint32_t mb_brc_lut;
5015     } dw78;
5016
5017     struct {
5018         uint32_t vme_inter_prediction_surf_index;
5019     } dw79;
5020
5021     struct {
5022         uint32_t vme_inter_prediction_mr_surf_index;
5023     } dw80;
5024
5025     struct {
5026         uint32_t flatness_chk_surf_index;
5027     } dw81;
5028
5029     struct {
5030         uint32_t mad_surf_index;
5031     } dw82;
5032
5033     struct {
5034         uint32_t force_non_skip_mb_map_surface;
5035     } dw83;
5036
5037     struct {
5038         uint32_t widi_wa_surf_index;
5039     } dw84;
5040
5041     struct {
5042         uint32_t brc_curbe_surf_index;
5043     } dw85;
5044
5045     struct {
5046         uint32_t static_detection_cost_table_index;
5047     } dw86;
5048
5049     struct {
5050         uint32_t reserved0;
5051     } dw87;
5052
5053 } gen8_avc_mbenc_curbe_data;
5054
5055 typedef struct _gen8_avc_frame_brc_update_curbe_data {
5056     struct {
5057         uint32_t target_size;
5058     } dw0;
5059
5060     struct {
5061         uint32_t frame_number;
5062     } dw1;
5063
5064     struct {
5065         uint32_t size_of_pic_headers;
5066     } dw2;
5067
5068     struct {
5069         uint32_t start_gadj_frame0: 16;
5070         uint32_t start_gadj_frame1: 16;
5071     } dw3;
5072
5073     struct {
5074         uint32_t start_gadj_frame2: 16;
5075         uint32_t start_gadj_frame3: 16;
5076     } dw4;
5077
5078     struct {
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;
5083     } dw5;
5084
5085     struct {
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;
5090     } dw6;
5091
5092     struct {
5093         uint32_t size_skip_frames;
5094     } dw7;
5095
5096     struct {
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;
5101     } dw8;
5102
5103     struct {
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;
5108     } dw9;
5109
5110     struct {
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;
5115     } dw10;
5116
5117     struct {
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;
5122     } dw11;
5123
5124     struct {
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;
5129     } dw12;
5130
5131     struct {
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;
5136     } dw13;
5137
5138     struct {
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;
5143     } dw14;
5144
5145     struct {
5146         uint32_t widi_qp_intra_resresh: 8;
5147         uint32_t reserved0: 8;
5148     } dw15;
5149
5150     struct {
5151         uint32_t widi_intra_refresh_y_pos: 16;
5152         uint32_t widi_intra_refresh_x_pos: 16;
5153     } dw16;
5154
5155     struct {
5156         uint32_t widi_intra_refresh_height: 16;
5157         uint32_t widi_intra_refresh_width: 16;
5158     } dw17;
5159 } gen8_avc_frame_brc_update_curbe_data;
5160
5161 typedef struct _gen8_avc_scaling4x_curbe_data {
5162     struct {
5163         uint32_t   input_picture_width  : 16;
5164         uint32_t   input_picture_height : 16;
5165     } dw0;
5166
5167     struct {
5168         uint32_t   input_y_bti;
5169     } dw1;
5170
5171     struct {
5172         uint32_t   output_y_bti;
5173     } dw2;
5174
5175     struct {
5176         uint32_t   input_y_bti_bottom_field;
5177     } dw3;
5178
5179     struct {
5180         uint32_t   output_y_bti_bottom_field;
5181     } dw4;
5182
5183     struct {
5184         uint32_t flatness_threshold;
5185     } dw5;
5186
5187     struct {
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;
5193     } dw6;
5194
5195     struct {
5196         uint32_t reserved;
5197     } dw7;
5198
5199     struct {
5200         uint32_t flatness_output_bti_top_field;
5201     } dw8;
5202
5203     struct {
5204         uint32_t flatness_output_bti_bottom_field;
5205     } dw9;
5206
5207     struct {
5208         uint32_t mbv_proc_states_bti_top_field;
5209     } dw10;
5210
5211     struct {
5212         uint32_t mbv_proc_states_bti_bottom_field;
5213     } dw11;
5214 } gen8_avc_scaling4x_curbe_data;
5215
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;
5262
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;
5278
5279 typedef struct _gen8_avc_me_curbe_data {
5280     struct {
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;
5290     } dw0;
5291
5292     struct {
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;
5299     } dw1;
5300
5301     struct {
5302         uint32_t max_len_sp: 8;
5303         uint32_t max_num_su: 8;
5304         uint32_t reserved0: 16;
5305     } dw2;
5306
5307     struct {
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;
5326     } dw3;
5327
5328     struct {
5329         uint32_t reserved0: 8;
5330         uint32_t picture_height_minus1: 8;
5331         uint32_t picture_width: 8;
5332         uint32_t reserved1: 8;
5333     } dw4;
5334
5335     struct {
5336         uint32_t reserved0: 8;
5337         uint32_t qp_prime_y: 8;
5338         uint32_t ref_width: 8;
5339         uint32_t ref_height: 8;
5340     } dw5;
5341
5342     struct {
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;
5349     } dw6;
5350
5351     struct {
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;
5361     } dw7;
5362
5363     struct {
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;
5368     } dw8;
5369
5370     struct {
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;
5375     } dw9;
5376
5377     struct {
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;
5382     } dw10;
5383
5384     struct {
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;
5389     } dw11;
5390
5391     struct {
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;
5396     } dw12;
5397
5398     struct {
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;
5403     } dw13;
5404
5405     struct {
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;
5417     } dw14;
5418
5419     struct {
5420         uint32_t prev_mv_read_pos_factor : 8;
5421         uint32_t mv_shift_factor : 8;
5422         uint32_t reserved: 16;
5423     } dw15;
5424
5425     struct {
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;
5430     } dw16;
5431
5432     struct {
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;
5437     } dw17;
5438
5439     struct {
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;
5444     } dw18;
5445
5446     struct {
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;
5451     } dw19;
5452
5453     struct {
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;
5458     } dw20;
5459
5460     struct {
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;
5465     } dw21;
5466
5467     struct {
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;
5472     } dw22;
5473
5474     struct {
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;
5479     } dw23;
5480
5481     struct {
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;
5486     } dw24;
5487
5488     struct {
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;
5493     } dw25;
5494
5495     struct {
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;
5500     } dw26;
5501
5502     struct {
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;
5507     } dw27;
5508
5509     struct {
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;
5514     } dw28;
5515
5516     struct {
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;
5521     } dw29;
5522
5523     struct {
5524         uint32_t reserved0;
5525     } dw30;
5526
5527     struct {
5528         uint32_t reserved0;
5529     } dw31;
5530
5531     struct {
5532         uint32_t _4x_memv_output_data_surf_index;
5533     } dw32;
5534
5535     struct {
5536         uint32_t _16x_32x_memv_input_data_surf_index;
5537     } dw33;
5538
5539     struct {
5540         uint32_t _4x_me_output_dist_surf_index;
5541     } dw34;
5542
5543     struct {
5544         uint32_t _4x_me_output_brc_dist_surf_index;
5545     } dw35;
5546
5547     struct {
5548         uint32_t vme_fwd_inter_pred_surf_index;
5549     } dw36;
5550
5551     struct {
5552         uint32_t vme_bdw_inter_pred_surf_index;
5553     } dw37;
5554
5555     /* reserved */
5556     struct {
5557         uint32_t reserved;
5558     } dw38;
5559 } gen8_avc_me_curbe_data;
5560
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;
5592
5593 #endif /* I965_AVC_ENCODER_H */