OSDN Git Service

test/streamables: use new vaStr methods when appropriate
[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     /* 2x DownScaling */
450     kernel_header ply_2xdscale_ply;
451     kernel_header ply_2xdscale_2f_ply_2f;
452
453 } gen9_avc_fei_encoder_kernel_header;
454
455 /*
456    The definition for Scaling
457 */
458 typedef enum _gen9_avc_binding_table_offset_scaling {
459     GEN9_AVC_SCALING_FRAME_SRC_Y_INDEX                      = 0,
460     GEN9_AVC_SCALING_FRAME_DST_Y_INDEX                      = 1,
461     GEN9_AVC_SCALING_FRAME_MBVPROCSTATS_DST_INDEX           = 4,
462     GEN9_AVC_SCALING_NUM_SURFACES                           = 6
463 } gen9_avc_binding_table_offset_scaling;
464
465 typedef struct _gen9_avc_scaling4x_curbe_data {
466     struct {
467         uint32_t   input_picture_width  : 16;
468         uint32_t   input_picture_height : 16;
469     } dw0;
470
471     struct {
472         uint32_t   input_y_bti;
473     } dw1;
474
475     struct {
476         uint32_t   output_y_bti;
477     } dw2;
478
479     struct {
480         uint32_t reserved;
481     } dw3;
482
483     struct {
484         uint32_t reserved;
485     } dw4;
486
487     struct {
488         uint32_t flatness_threshold;
489     } dw5;
490
491     struct {
492         uint32_t enable_mb_flatness_check;
493     } dw6;
494
495     struct {
496         uint32_t enable_mb_variance_output;
497     } dw7;
498
499     struct {
500         uint32_t enable_mb_pixel_average_output;
501     } dw8;
502
503     struct {
504         uint32_t reserved;
505     } dw9;
506
507     struct {
508         uint32_t mbv_proc_stat_bti;
509     } dw10;
510
511     struct {
512         uint32_t reserved;
513     } dw11;
514 } gen9_avc_scaling4x_curbe_data;
515
516 typedef struct _gen9_avc_scaling2x_curbe_data {
517     struct {
518         uint32_t   input_picture_width  : 16;
519         uint32_t   input_picture_height : 16;
520     } dw0;
521
522     /* dw1-dw7 */
523     uint32_t reserved1[7];
524
525     struct {
526         uint32_t input_y_bti;
527     } dw8;
528
529     struct {
530         uint32_t output_y_bti;
531     } dw9;
532
533     uint32_t reserved2[2];
534 } gen9_avc_scaling2x_curbe_data;
535
536 #define GEN9_AVC_KERNEL_SCALING_2X_IDX         0
537 #define GEN9_AVC_KERNEL_SCALING_4X_IDX         1
538 #define NUM_GEN9_AVC_KERNEL_SCALING            2
539
540 struct gen_avc_scaling_context {
541     struct i965_gpe_context gpe_contexts[NUM_GEN9_AVC_KERNEL_SCALING];
542 };
543
544 /*
545 me structure and define
546 */
547 typedef enum _gen9_avc_binding_table_offset_me {
548     GEN9_AVC_ME_MV_DATA_SURFACE_INDEX       = 0,
549     GEN9_AVC_16XME_MV_DATA_SURFACE_INDEX    = 1,
550     GEN9_AVC_32XME_MV_DATA_SURFACE_INDEX    = 1,
551     GEN9_AVC_ME_DISTORTION_SURFACE_INDEX    = 2,
552     GEN9_AVC_ME_BRC_DISTORTION_INDEX        = 3,
553     GEN9_AVC_ME_RESERVED0_INDEX             = 4,
554     GEN9_AVC_ME_CURR_FOR_FWD_REF_INDEX      = 5,
555     GEN9_AVC_ME_FWD_REF_IDX0_INDEX          = 6,
556     GEN9_AVC_ME_RESERVED1_INDEX             = 7,
557     GEN9_AVC_ME_FWD_REF_IDX1_INDEX          = 8,
558     GEN9_AVC_ME_RESERVED2_INDEX             = 9,
559     GEN9_AVC_ME_FWD_REF_IDX2_INDEX          = 10,
560     GEN9_AVC_ME_RESERVED3_INDEX             = 11,
561     GEN9_AVC_ME_FWD_REF_IDX3_INDEX          = 12,
562     GEN9_AVC_ME_RESERVED4_INDEX             = 13,
563     GEN9_AVC_ME_FWD_REF_IDX4_INDEX          = 14,
564     GEN9_AVC_ME_RESERVED5_INDEX             = 15,
565     GEN9_AVC_ME_FWD_REF_IDX5_INDEX          = 16,
566     GEN9_AVC_ME_RESERVED6_INDEX             = 17,
567     GEN9_AVC_ME_FWD_REF_IDX6_INDEX          = 18,
568     GEN9_AVC_ME_RESERVED7_INDEX             = 19,
569     GEN9_AVC_ME_FWD_REF_IDX7_INDEX          = 20,
570     GEN9_AVC_ME_RESERVED8_INDEX             = 21,
571     GEN9_AVC_ME_CURR_FOR_BWD_REF_INDEX      = 22,
572     GEN9_AVC_ME_BWD_REF_IDX0_INDEX          = 23,
573     GEN9_AVC_ME_RESERVED9_INDEX             = 24,
574     GEN9_AVC_ME_BWD_REF_IDX1_INDEX          = 25,
575     GEN9_AVC_ME_VDENC_STREAMIN_INDEX        = 26,
576     GEN9_AVC_ME_NUM_SURFACES_INDEX          = 27
577 } gen9_avc_binding_table_offset_me;
578
579 typedef struct _gen9_avc_me_curbe_data {
580     struct {
581         uint32_t skip_mode_enable: 1;
582         uint32_t adaptive_enable: 1;
583         uint32_t bi_mix_dis: 1;
584         uint32_t reserved0: 2;
585         uint32_t early_ime_success_enable: 1;
586         uint32_t reserved1: 1;
587         uint32_t t8x8_flag_for_inter_enable: 1;
588         uint32_t reserved2: 16;
589         uint32_t early_ime_stop: 8;
590     } dw0;
591
592     struct {
593         uint32_t max_num_mvs: 6;
594         uint32_t reserved0: 10;
595         uint32_t bi_weight: 6;
596         uint32_t reserved1: 6;
597         uint32_t uni_mix_disable: 1;
598         uint32_t reserved2: 3;
599     } dw1;
600
601     struct {
602         uint32_t max_len_sp: 8;
603         uint32_t max_num_su: 8;
604         uint32_t reserved0: 16;
605     } dw2;
606
607     struct {
608         uint32_t src_size: 2;
609         uint32_t reserved0: 2;
610         uint32_t mb_type_remap: 2;
611         uint32_t src_access: 1;
612         uint32_t ref_access: 1;
613         uint32_t search_ctrl: 3;
614         uint32_t dual_search_path_option: 1;
615         uint32_t sub_pel_mode: 2;
616         uint32_t skip_type: 1;
617         uint32_t disable_field_cache_allocation: 1;
618         uint32_t inter_chroma_mode: 1;
619         uint32_t ft_enable: 1;
620         uint32_t bme_disable_fbr: 1;
621         uint32_t block_based_skip_enable: 1;
622         uint32_t inter_sad: 2;
623         uint32_t intra_sad: 2;
624         uint32_t sub_mb_part_mask: 7;
625         uint32_t reserved1: 1;
626     } dw3;
627
628     struct {
629         uint32_t reserved0: 8;
630         uint32_t picture_height_minus1: 8;
631         uint32_t picture_width: 8;
632         uint32_t reserved1: 8;
633     } dw4;
634
635     struct {
636         uint32_t reserved0: 8;
637         uint32_t qp_prime_y: 8;
638         uint32_t ref_width: 8;
639         uint32_t ref_height: 8;
640     } dw5;
641
642     struct {
643         uint32_t reserved0: 3;
644         uint32_t write_distortions: 1;
645         uint32_t use_mv_from_prev_step: 1;
646         uint32_t reserved1: 3;
647         uint32_t super_combine_dist: 8;
648         uint32_t max_vmvr: 16;
649     } dw6;
650
651     struct {
652         uint32_t reserved0: 16;
653         uint32_t mv_cost_scale_factor: 2;
654         uint32_t bilinear_enable: 1;
655         uint32_t src_field_polarity: 1;
656         uint32_t weightedsad_harr: 1;
657         uint32_t ac_only_haar: 1;
658         uint32_t ref_id_cost_mode: 1;
659         uint32_t reserved1: 1;
660         uint32_t skip_center_mask: 8;
661     } dw7;
662
663     struct {
664         uint32_t mode_0_cost: 8;
665         uint32_t mode_1_cost: 8;
666         uint32_t mode_2_cost: 8;
667         uint32_t mode_3_cost: 8;
668     } dw8;
669
670     struct {
671         uint32_t mode_4_cost: 8;
672         uint32_t mode_5_cost: 8;
673         uint32_t mode_6_cost: 8;
674         uint32_t mode_7_cost: 8;
675     } dw9;
676
677     struct {
678         uint32_t mode_8_cost: 8;
679         uint32_t mode_9_cost: 8;
680         uint32_t ref_id_cost: 8;
681         uint32_t chroma_intra_mode_cost: 8;
682     } dw10;
683
684     struct {
685         uint32_t mv_0_cost: 8;
686         uint32_t mv_1_cost: 8;
687         uint32_t mv_2_cost: 8;
688         uint32_t mv_3_cost: 8;
689     } dw11;
690
691     struct {
692         uint32_t mv_4_cost: 8;
693         uint32_t mv_5_cost: 8;
694         uint32_t mv_6_cost: 8;
695         uint32_t mv_7_cost: 8;
696     } dw12;
697
698     struct {
699         uint32_t num_ref_idx_l0_minus1: 8;
700         uint32_t num_ref_idx_l1_minus1: 8;
701         uint32_t ref_streamin_cost: 8;
702         uint32_t roi_enable: 3;
703         uint32_t reserved0: 5;
704     } dw13;
705
706     struct {
707         uint32_t l0_ref_pic_polarity_bits: 8;
708         uint32_t l1_ref_pic_polarity_bits: 2;
709         uint32_t reserved: 22;
710     } dw14;
711
712     struct {
713         uint32_t prev_mv_read_pos_factor : 8;
714         uint32_t mv_shift_factor : 8;
715         uint32_t reserved: 16;
716     } dw15;
717
718     struct {
719         struct generic_search_path_delta sp_delta_0;
720         struct generic_search_path_delta sp_delta_1;
721         struct generic_search_path_delta sp_delta_2;
722         struct generic_search_path_delta sp_delta_3;
723     } dw16;
724
725     struct {
726         struct generic_search_path_delta sp_delta_4;
727         struct generic_search_path_delta sp_delta_5;
728         struct generic_search_path_delta sp_delta_6;
729         struct generic_search_path_delta sp_delta_7;
730     } dw17;
731
732     struct {
733         struct generic_search_path_delta sp_delta_8;
734         struct generic_search_path_delta sp_delta_9;
735         struct generic_search_path_delta sp_delta_10;
736         struct generic_search_path_delta sp_delta_11;
737     } dw18;
738
739     struct {
740         struct generic_search_path_delta sp_delta_12;
741         struct generic_search_path_delta sp_delta_13;
742         struct generic_search_path_delta sp_delta_14;
743         struct generic_search_path_delta sp_delta_15;
744     } dw19;
745
746     struct {
747         struct generic_search_path_delta sp_delta_16;
748         struct generic_search_path_delta sp_delta_17;
749         struct generic_search_path_delta sp_delta_18;
750         struct generic_search_path_delta sp_delta_19;
751     } dw20;
752
753     struct {
754         struct generic_search_path_delta sp_delta_20;
755         struct generic_search_path_delta sp_delta_21;
756         struct generic_search_path_delta sp_delta_22;
757         struct generic_search_path_delta sp_delta_23;
758     } dw21;
759
760     struct {
761         struct generic_search_path_delta sp_delta_24;
762         struct generic_search_path_delta sp_delta_25;
763         struct generic_search_path_delta sp_delta_26;
764         struct generic_search_path_delta sp_delta_27;
765     } dw22;
766
767     struct {
768         struct generic_search_path_delta sp_delta_28;
769         struct generic_search_path_delta sp_delta_29;
770         struct generic_search_path_delta sp_delta_30;
771         struct generic_search_path_delta sp_delta_31;
772     } dw23;
773
774     struct {
775         struct generic_search_path_delta sp_delta_32;
776         struct generic_search_path_delta sp_delta_33;
777         struct generic_search_path_delta sp_delta_34;
778         struct generic_search_path_delta sp_delta_35;
779     } dw24;
780
781     struct {
782         struct generic_search_path_delta sp_delta_36;
783         struct generic_search_path_delta sp_delta_37;
784         struct generic_search_path_delta sp_delta_38;
785         struct generic_search_path_delta sp_delta_39;
786     } dw25;
787
788     struct {
789         struct generic_search_path_delta sp_delta_40;
790         struct generic_search_path_delta sp_delta_41;
791         struct generic_search_path_delta sp_delta_42;
792         struct generic_search_path_delta sp_delta_43;
793     } dw26;
794
795     struct {
796         struct generic_search_path_delta sp_delta_44;
797         struct generic_search_path_delta sp_delta_45;
798         struct generic_search_path_delta sp_delta_46;
799         struct generic_search_path_delta sp_delta_47;
800     } dw27;
801
802     struct {
803         struct generic_search_path_delta sp_delta_48;
804         struct generic_search_path_delta sp_delta_49;
805         struct generic_search_path_delta sp_delta_50;
806         struct generic_search_path_delta sp_delta_51;
807     } dw28;
808
809     struct {
810         struct generic_search_path_delta sp_delta_52;
811         struct generic_search_path_delta sp_delta_53;
812         struct generic_search_path_delta sp_delta_54;
813         struct generic_search_path_delta sp_delta_55;
814     } dw29;
815
816     struct {
817         uint32_t actual_mb_width: 16;
818         uint32_t actual_mb_height: 16;
819     } dw30;
820
821     struct {
822         uint32_t reserved0;
823     } dw31;
824
825     struct {
826         uint32_t _4x_memv_output_data_surf_index;
827     } dw32;
828
829     struct {
830         uint32_t _16x_32x_memv_input_data_surf_index;
831     } dw33;
832
833     struct {
834         uint32_t _4x_me_output_dist_surf_index;
835     } dw34;
836
837     struct {
838         uint32_t _4x_me_output_brc_dist_surf_index;
839     } dw35;
840
841     struct {
842         uint32_t vme_fwd_inter_pred_surf_index;
843     } dw36;
844
845     struct {
846         uint32_t vme_bdw_inter_pred_surf_index;
847     } dw37;
848
849     /* reserved */
850     struct {
851         uint32_t reserved;
852     } dw38;
853 } gen9_avc_me_curbe_data;
854
855 #define GEN9_AVC_KERNEL_ME_P_IDX         0
856 #define GEN9_AVC_KERNEL_ME_B_IDX         1
857 #define NUM_GEN9_AVC_KERNEL_ME           2
858
859 struct gen_avc_me_context {
860     struct i965_gpe_context gpe_contexts[NUM_GEN9_AVC_KERNEL_ME];
861 };
862
863 /*
864 frame/mb brc structure and define
865 */
866 typedef enum _gen9_avc_binding_table_offset_brc_init_reset {
867     GEN9_AVC_BRC_INIT_RESET_HISTORY_INDEX = 0,
868     GEN9_AVC_BRC_INIT_RESET_DISTORTION_INDEX,
869     GEN9_AVC_BRC_INIT_RESET_NUM_SURFACES
870 } gen9_avc_binding_table_offset_brc_init_reset;
871
872 typedef struct _gen9_avc_brc_init_reset_curbe_data {
873     struct {
874         uint32_t profile_level_max_frame;
875     } dw0;
876
877     struct {
878         uint32_t init_buf_full_in_bits;
879     } dw1;
880
881     struct {
882         uint32_t buf_size_in_bits;
883     } dw2;
884
885     struct {
886         uint32_t average_bit_rate;
887     } dw3;
888
889     struct {
890         uint32_t max_bit_rate;
891     } dw4;
892
893     struct {
894         uint32_t min_bit_rate;
895     } dw5;
896
897     struct {
898         uint32_t frame_rate_m;
899     } dw6;
900
901     struct {
902         uint32_t frame_rate_d;
903     } dw7;
904
905     struct {
906         uint32_t brc_flag: 16;
907         uint32_t gop_p: 16;
908     } dw8;
909
910     struct {
911         uint32_t gop_b: 16;
912         uint32_t frame_width_in_bytes: 16;
913     } dw9;
914
915     struct {
916         uint32_t frame_height_in_bytes: 16;
917         uint32_t avbr_accuracy: 16;
918     } dw10;
919
920     struct {
921         uint32_t avbr_convergence: 16;
922         uint32_t min_qp: 16;
923     } dw11;
924
925     struct {
926         uint32_t max_qp: 16;
927         uint32_t no_slices: 16;
928     } dw12;
929
930     struct {
931         uint32_t instant_rate_threshold_0_p: 8;
932         uint32_t instant_rate_threshold_1_p: 8;
933         uint32_t instant_rate_threshold_2_p: 8;
934         uint32_t instant_rate_threshold_3_p: 8;
935     } dw13;
936
937     struct {
938         uint32_t instant_rate_threshold_0_b: 8;
939         uint32_t instant_rate_threshold_1_b: 8;
940         uint32_t instant_rate_threshold_2_b: 8;
941         uint32_t instant_rate_threshold_3_b: 8;
942     } dw14;
943
944     struct {
945         uint32_t instant_rate_threshold_0_i: 8;
946         uint32_t instant_rate_threshold_1_i: 8;
947         uint32_t instant_rate_threshold_2_i: 8;
948         uint32_t instant_rate_threshold_3_i: 8;
949     } dw15;
950
951     struct {
952         uint32_t deviation_threshold_0_pand_b: 8;
953         uint32_t deviation_threshold_1_pand_b: 8;
954         uint32_t deviation_threshold_2_pand_b: 8;
955         uint32_t deviation_threshold_3_pand_b: 8;
956     } dw16;
957
958     struct {
959         uint32_t deviation_threshold_4_pand_b: 8;
960         uint32_t deviation_threshold_5_pand_b: 8;
961         uint32_t deviation_threshold_6_pand_b: 8;
962         uint32_t deviation_threshold_7_pand_b: 8;
963     } dw17;
964
965     struct {
966         uint32_t deviation_threshold_0_vbr: 8;
967         uint32_t deviation_threshold_1_vbr: 8;
968         uint32_t deviation_threshold_2_vbr: 8;
969         uint32_t deviation_threshold_3_vbr: 8;
970     } dw18;
971
972     struct {
973         uint32_t deviation_threshold_4_vbr: 8;
974         uint32_t deviation_threshold_5_vbr: 8;
975         uint32_t deviation_threshold_6_vbr: 8;
976         uint32_t deviation_threshold_7_vbr: 8;
977     } dw19;
978
979     struct {
980         uint32_t deviation_threshold_0_i: 8;
981         uint32_t deviation_threshold_1_i: 8;
982         uint32_t deviation_threshold_2_i: 8;
983         uint32_t deviation_threshold_3_i: 8;
984     } dw20;
985
986     struct {
987         uint32_t deviation_threshold_4_i: 8;
988         uint32_t deviation_threshold_5_i: 8;
989         uint32_t deviation_threshold_6_i: 8;
990         uint32_t deviation_threshold_7_i: 8;
991     } dw21;
992
993     struct {
994         uint32_t initial_qp_i: 8;
995         uint32_t initial_qp_p: 8;
996         uint32_t initial_qp_b: 8;
997         uint32_t sliding_window_size: 8;
998     } dw22;
999
1000     struct {
1001         uint32_t acqp;
1002     } dw23;
1003
1004 } gen9_avc_brc_init_reset_curbe_data;
1005
1006 typedef enum _gen9_avc_binding_table_offset_frame_brc_update {
1007     GEN9_AVC_FRAME_BRC_UPDATE_HISTORY_INDEX                = 0,
1008     GEN9_AVC_FRAME_BRC_UPDATE_PAK_STATISTICS_OUTPUT_INDEX  = 1,
1009     GEN9_AVC_FRAME_BRC_UPDATE_IMAGE_STATE_READ_INDEX       = 2,
1010     GEN9_AVC_FRAME_BRC_UPDATE_IMAGE_STATE_WRITE_INDEX      = 3,
1011     GEN9_AVC_FRAME_BRC_UPDATE_MBENC_CURBE_READ_INDEX       = 4,
1012     GEN9_AVC_FRAME_BRC_UPDATE_MBENC_CURBE_WRITE_INDEX      = 5,
1013     GEN9_AVC_FRAME_BRC_UPDATE_DISTORTION_INDEX             = 6,
1014     GEN9_AVC_FRAME_BRC_UPDATE_CONSTANT_DATA_INDEX          = 7,
1015     GEN9_AVC_FRAME_BRC_UPDATE_MB_STATUS_INDEX              = 8,
1016     GEN9_AVC_FRAME_BRC_UPDATE_NUM_SURFACES_INDEX           = 9
1017 } gen9_avc_binding_table_offset_frame_brc_update;
1018
1019 typedef struct _gen9_avc_frame_brc_update_curbe_data {
1020     struct {
1021         uint32_t target_size;
1022     } dw0;
1023
1024     struct {
1025         uint32_t frame_number;
1026     } dw1;
1027
1028     struct {
1029         uint32_t size_of_pic_headers;
1030     } dw2;
1031
1032     struct {
1033         uint32_t start_gadj_frame0: 16;
1034         uint32_t start_gadj_frame1: 16;
1035     } dw3;
1036
1037     struct {
1038         uint32_t start_gadj_frame2: 16;
1039         uint32_t start_gadj_frame3: 16;
1040     } dw4;
1041
1042     struct {
1043         uint32_t target_size_flag: 8;
1044         uint32_t brc_flag: 8;
1045         uint32_t max_num_paks: 8;
1046         uint32_t cur_frame_type: 8;
1047     } dw5;
1048
1049     struct {
1050         uint32_t num_skip_frames: 8;
1051         uint32_t minimum_qp: 8;
1052         uint32_t maximum_qp: 8;
1053         uint32_t enable_force_skip: 1;
1054         uint32_t enable_sliding_window: 1;
1055         uint32_t reserved: 6;
1056     } dw6;
1057
1058     struct {
1059         uint32_t size_skip_frames;
1060     } dw7;
1061
1062     struct {
1063         uint32_t start_global_adjust_mult_0: 8;
1064         uint32_t start_global_adjust_mult_1: 8;
1065         uint32_t start_global_adjust_mult_2: 8;
1066         uint32_t start_global_adjust_mult_3: 8;
1067     } dw8;
1068
1069     struct {
1070         uint32_t start_global_adjust_mult_4: 8;
1071         uint32_t start_global_adjust_div_0: 8;
1072         uint32_t start_global_adjust_div_1: 8;
1073         uint32_t start_global_adjust_div_2: 8;
1074     } dw9;
1075
1076     struct {
1077         uint32_t start_global_adjust_div_3: 8;
1078         uint32_t start_global_adjust_div_4: 8;
1079         uint32_t qp_threshold_0: 8;
1080         uint32_t qp_threshold_1: 8;
1081     } dw10;
1082
1083     struct {
1084         uint32_t qp_threshold_2: 8;
1085         uint32_t qp_threshold_3: 8;
1086         uint32_t g_rate_ratio_threshold_0: 8;
1087         uint32_t g_rate_ratio_threshold_1: 8;
1088     } dw11;
1089
1090     struct {
1091         uint32_t g_rate_ratio_threshold_2: 8;
1092         uint32_t g_rate_ratio_threshold_3: 8;
1093         uint32_t g_rate_ratio_threshold_4: 8;
1094         uint32_t g_rate_ratio_threshold_5: 8;
1095     } dw12;
1096
1097     struct {
1098         uint32_t g_rate_ratio_threshold_qp_0: 8;
1099         uint32_t g_rate_ratio_threshold_qp_1: 8;
1100         uint32_t g_rate_ratio_threshold_qp_2: 8;
1101         uint32_t g_rate_ratio_threshold_qp_3: 8;
1102     } dw13;
1103
1104     struct {
1105         uint32_t g_rate_ratio_threshold_qp_4: 8;
1106         uint32_t g_rate_ratio_threshold_qp_5: 8;
1107         uint32_t g_rate_ratio_threshold_qp_6: 8;
1108         uint32_t qp_index_of_cur_pic: 8;
1109     } dw14;
1110
1111     struct {
1112         uint32_t reserved0: 8;
1113         uint32_t enable_roi: 8;
1114         uint32_t reserved1: 8;
1115         uint32_t reserved2: 8;
1116     } dw15;
1117
1118     struct {
1119         uint32_t reserved;
1120     } dw16;
1121
1122     struct {
1123         uint32_t reserved;
1124     } dw17;
1125
1126     struct {
1127         uint32_t reserved;
1128     } dw18;
1129
1130     struct {
1131         uint32_t user_max_frame;
1132     } dw19;
1133
1134     struct {
1135         uint32_t reserved;
1136     } dw20;
1137
1138     struct {
1139         uint32_t reserved;
1140     } dw21;
1141
1142     struct {
1143         uint32_t reserved;
1144     } dw22;
1145
1146     struct {
1147         uint32_t reserved;
1148     } dw23;
1149
1150 } gen9_avc_frame_brc_update_curbe_data;
1151
1152 typedef enum _gen9_avc_binding_table_offset_mb_brc_update {
1153     GEN9_AVC_MB_BRC_UPDATE_HISTORY_INDEX               = 0,
1154     GEN9_AVC_MB_BRC_UPDATE_MB_QP_INDEX                 = 1,
1155     GEN9_AVC_MB_BRC_UPDATE_ROI_INDEX                   = 2,
1156     GEN9_AVC_MB_BRC_UPDATE_MB_STATUS_INDEX             = 3,
1157     GEN9_AVC_MB_BRC_UPDATE_NUM_SURFACES_INDEX          = 4
1158 } gen9_avc_binding_table_offset_mb_brc_update;
1159
1160 typedef struct _gen9_avc_mb_brc_curbe_data {
1161     struct {
1162         uint32_t cur_frame_type: 8;
1163         uint32_t enable_roi: 8;
1164         uint32_t roi_ratio: 8;
1165         uint32_t reserved0: 8;
1166     } dw0;
1167
1168     struct {
1169         uint32_t reserved;
1170     } dw1;
1171
1172     struct {
1173         uint32_t reserved;
1174     } dw2;
1175
1176     struct {
1177         uint32_t reserved;
1178     } dw3;
1179
1180     struct {
1181         uint32_t reserved;
1182     } dw4;
1183
1184     struct {
1185         uint32_t reserved;
1186     } dw5;
1187
1188     struct {
1189         uint32_t reserved;
1190     } dw6;
1191
1192
1193 } gen9_avc_mb_brc_curbe_data;
1194
1195 #define GEN9_AVC_KERNEL_BRC_INIT         0
1196 #define GEN9_AVC_KERNEL_BRC_FRAME_UPDATE 1
1197 #define GEN9_AVC_KERNEL_BRC_RESET        2
1198 #define GEN9_AVC_KERNEL_BRC_I_FRAME_DIST 3
1199 #define GEN9_AVC_KERNEL_BRC_BLOCK_COPY   4
1200 #define GEN9_AVC_KERNEL_BRC_MB_UPDATE    5
1201 #define NUM_GEN9_AVC_KERNEL_BRC          6
1202
1203 struct gen_avc_brc_context {
1204     struct i965_gpe_context gpe_contexts[NUM_GEN9_AVC_KERNEL_BRC];
1205 };
1206
1207 /*
1208 wp structure and define
1209 */
1210 typedef enum _gen9_avc_binding_table_offset_wp {
1211     GEN9_AVC_WP_INPUT_REF_SURFACE_INDEX                 = 0,
1212     GEN9_AVC_WP_OUTPUT_SCALED_SURFACE_INDEX             = 1,
1213     GEN9_AVC_WP_NUM_SURFACES_INDEX                      = 2
1214 } gen9_avc_binding_table_offset_wp;
1215
1216 typedef struct _gen9_avc_wp_curbe_data {
1217     struct {
1218         uint32_t default_weight: 16;
1219         uint32_t default_offset: 16;
1220     } dw0;
1221
1222     struct {
1223         uint32_t roi_0_x_left: 16;
1224         uint32_t roi_0_y_top: 16;
1225     } dw1;
1226
1227     struct {
1228         uint32_t roi_0_x_right: 16;
1229         uint32_t roi_0_y_bottom: 16;
1230     } dw2;
1231
1232     struct {
1233         uint32_t roi_0_weight: 16;
1234         uint32_t roi_0_offset: 16;
1235     } dw3;
1236
1237     struct {
1238         uint32_t roi_1_x_left: 16;
1239         uint32_t roi_1_y_top: 16;
1240     } dw4;
1241
1242     struct {
1243         uint32_t roi_1_x_right: 16;
1244         uint32_t roi_1_y_bottom: 16;
1245     } dw5;
1246
1247     struct {
1248         uint32_t roi_1_weight: 16;
1249         uint32_t roi_1_offset: 16;
1250     } dw6;
1251
1252     struct {
1253         uint32_t roi_2_x_left: 16;
1254         uint32_t roi_2_y_top: 16;
1255     } dw7;
1256
1257     struct {
1258         uint32_t roi_2_x_right: 16;
1259         uint32_t roi_2_y_bottom: 16;
1260     } dw8;
1261
1262     struct {
1263         uint32_t roi_2_weight: 16;
1264         uint32_t roi_2_offset: 16;
1265     } dw9;
1266
1267     struct {
1268         uint32_t roi_3_x_left: 16;
1269         uint32_t roi_3_y_top: 16;
1270     } dw10;
1271
1272     struct {
1273         uint32_t roi_3_x_right: 16;
1274         uint32_t roi_3_y_bottom: 16;
1275     } dw11;
1276
1277     struct {
1278         uint32_t roi_3_weight: 16;
1279         uint32_t roi_3_offset: 16;
1280     } dw12;
1281
1282     struct {
1283         uint32_t roi_4_x_left: 16;
1284         uint32_t roi_4_y_top: 16;
1285     } dw13;
1286
1287     struct {
1288         uint32_t roi_4_x_right: 16;
1289         uint32_t roi_4_y_bottom: 16;
1290     } dw14;
1291
1292     struct {
1293         uint32_t roi_4_weight: 16;
1294         uint32_t roi_4_offset: 16;
1295     } dw15;
1296
1297     struct {
1298         uint32_t roi_5_x_left: 16;
1299         uint32_t roi_5_y_top: 16;
1300     } dw16;
1301
1302     struct {
1303         uint32_t roi_5_x_right: 16;
1304         uint32_t roi_5_y_bottom: 16;
1305     } dw17;
1306
1307     struct {
1308         uint32_t roi_5_weight: 16;
1309         uint32_t roi_5_offset: 16;
1310     } dw18;
1311
1312     struct {
1313         uint32_t roi_6_x_left: 16;
1314         uint32_t roi_6_y_top: 16;
1315     } dw19;
1316
1317     struct {
1318         uint32_t roi_6_x_right: 16;
1319         uint32_t roi_6_y_bottom: 16;
1320     } dw20;
1321
1322     struct {
1323         uint32_t roi_6_weight: 16;
1324         uint32_t roi_6_offset: 16;
1325     } dw21;
1326
1327     struct {
1328         uint32_t roi_7_x_left: 16;
1329         uint32_t roi_7_y_top: 16;
1330     } dw22;
1331
1332     struct {
1333         uint32_t roi_7_x_right: 16;
1334         uint32_t roi_7_y_bottom: 16;
1335     } dw23;
1336
1337     struct {
1338         uint32_t roi_7_weight: 16;
1339         uint32_t roi_7_offset: 16;
1340     } dw24;
1341
1342     struct {
1343         uint32_t roi_8_x_left: 16;
1344         uint32_t roi_8_y_top: 16;
1345     } dw25;
1346
1347     struct {
1348         uint32_t roi_8_x_right: 16;
1349         uint32_t roi_8_y_bottom: 16;
1350     } dw26;
1351
1352     struct {
1353         uint32_t roi_8_weight: 16;
1354         uint32_t roi_8_offset: 16;
1355     } dw27;
1356
1357     struct {
1358         uint32_t roi_9_x_left: 16;
1359         uint32_t roi_9_y_top: 16;
1360     } dw28;
1361
1362     struct {
1363         uint32_t roi_9_x_right: 16;
1364         uint32_t roi_9_y_bottom: 16;
1365     } dw29;
1366
1367     struct {
1368         uint32_t roi_9_weight: 16;
1369         uint32_t roi_9_offset: 16;
1370     } dw30;
1371
1372     struct {
1373         uint32_t roi_10_x_left: 16;
1374         uint32_t roi_10_y_top: 16;
1375     } dw31;
1376
1377     struct {
1378         uint32_t roi_10_x_right: 16;
1379         uint32_t roi_10_y_bottom: 16;
1380     } dw32;
1381
1382     struct {
1383         uint32_t roi_10_weight: 16;
1384         uint32_t roi_10_offset: 16;
1385     } dw33;
1386
1387     struct {
1388         uint32_t roi_11_x_left: 16;
1389         uint32_t roi_11_y_top: 16;
1390     } dw34;
1391
1392     struct {
1393         uint32_t roi_11_x_right: 16;
1394         uint32_t roi_11_y_bottom: 16;
1395     } dw35;
1396
1397     struct {
1398         uint32_t roi_11_weight: 16;
1399         uint32_t roi_11_offset: 16;
1400     } dw36;
1401
1402     struct {
1403         uint32_t roi_12_x_left: 16;
1404         uint32_t roi_12_y_top: 16;
1405     } dw37;
1406
1407     struct {
1408         uint32_t roi_12_x_right: 16;
1409         uint32_t roi_12_y_bottom: 16;
1410     } dw38;
1411
1412     struct {
1413         uint32_t roi_12_weight: 16;
1414         uint32_t roi_12_offset: 16;
1415     } dw39;
1416
1417     struct {
1418         uint32_t roi_13_x_left: 16;
1419         uint32_t roi_13_y_top: 16;
1420     } dw40;
1421
1422     struct {
1423         uint32_t roi_13_x_right: 16;
1424         uint32_t roi_13_y_bottom: 16;
1425     } dw41;
1426
1427     struct {
1428         uint32_t roi_13_weight: 16;
1429         uint32_t roi_13_offset: 16;
1430     } dw42;
1431
1432     struct {
1433         uint32_t roi_14_x_left: 16;
1434         uint32_t roi_14_y_top: 16;
1435     } dw43;
1436
1437     struct {
1438         uint32_t roi_14_x_right: 16;
1439         uint32_t roi_14_y_bottom: 16;
1440     } dw44;
1441
1442     struct {
1443         uint32_t roi_14_weight: 16;
1444         uint32_t roi_14_offset: 16;
1445     } dw45;
1446
1447     struct {
1448         uint32_t roi_15_x_left: 16;
1449         uint32_t roi_15_y_top: 16;
1450     } dw46;
1451
1452     struct {
1453         uint32_t roi_15_x_right: 16;
1454         uint32_t roi_15_y_bottom: 16;
1455     } dw47;
1456
1457     struct {
1458         uint32_t roi_15_weight: 16;
1459         uint32_t roi_15_offset: 16;
1460     } dw48;
1461
1462     struct {
1463         uint32_t input_surface;
1464     } dw49;
1465
1466     struct {
1467         uint32_t output_surface;
1468     } dw50;
1469
1470
1471
1472 } gen9_avc_wp_curbe_data;
1473
1474 struct gen_avc_wp_context {
1475     struct i965_gpe_context gpe_contexts;
1476 };
1477
1478 /*
1479 mbenc structure and define
1480 */
1481 typedef enum _gen9_avc_binding_table_offset_mbenc {
1482     GEN9_AVC_MBENC_MFC_AVC_PAK_OBJ_INDEX                    =  0,
1483     GEN9_AVC_MBENC_IND_MV_DATA_INDEX                        =  1,
1484     GEN9_AVC_MBENC_BRC_DISTORTION_INDEX                     =  2,    // FOR BRC DISTORTION FOR I
1485     GEN9_AVC_MBENC_CURR_Y_INDEX                             =  3,
1486     GEN9_AVC_MBENC_CURR_UV_INDEX                            =  4,
1487     GEN9_AVC_MBENC_MB_SPECIFIC_DATA_INDEX                   =  5,
1488     GEN9_AVC_MBENC_AUX_VME_OUT_INDEX                        =  6,
1489     GEN9_AVC_MBENC_REFPICSELECT_L0_INDEX                    =  7,
1490     GEN9_AVC_MBENC_MV_DATA_FROM_ME_INDEX                    =  8,
1491     GEN9_AVC_MBENC_4XME_DISTORTION_INDEX                    =  9,
1492     GEN9_AVC_MBENC_SLICEMAP_DATA_INDEX                      = 10,
1493     GEN9_AVC_MBENC_FWD_MB_DATA_INDEX                        = 11,
1494     GEN9_AVC_MBENC_FWD_MV_DATA_INDEX                        = 12,
1495     GEN9_AVC_MBENC_MBQP_INDEX                               = 13,
1496     GEN9_AVC_MBENC_MBBRC_CONST_DATA_INDEX                   = 14,
1497     GEN9_AVC_MBENC_VME_INTER_PRED_CURR_PIC_IDX_0_INDEX      = 15,
1498     GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX0_INDEX        = 16,
1499     GEN9_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX0_0_INDEX      = 17,
1500     GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX1_INDEX        = 18,
1501     GEN9_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX1_0_INDEX      = 19,
1502     GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX2_INDEX        = 20,
1503     GEN9_AVC_MBENC_RESERVED0_INDEX                          = 21,
1504     GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX3_INDEX        = 22,
1505     GEN9_AVC_MBENC_RESERVED1_INDEX                          = 23,
1506     GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX4_INDEX        = 24,
1507     GEN9_AVC_MBENC_RESERVED2_INDEX                          = 25,
1508     GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX5_INDEX        = 26,
1509     GEN9_AVC_MBENC_RESERVED3_INDEX                          = 27,
1510     GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX6_INDEX        = 28,
1511     GEN9_AVC_MBENC_RESERVED4_INDEX                          = 29,
1512     GEN9_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX7_INDEX        = 30,
1513     GEN9_AVC_MBENC_RESERVED5_INDEX                          = 31,
1514     GEN9_AVC_MBENC_VME_INTER_PRED_CURR_PIC_IDX_1_INDEX      = 32,
1515     GEN9_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX0_1_INDEX      = 33,
1516     GEN9_AVC_MBENC_RESERVED6_INDEX                          = 34,
1517     GEN9_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX1_1_INDEX      = 35,
1518     GEN9_AVC_MBENC_RESERVED7_INDEX                          = 36,
1519     GEN9_AVC_MBENC_MB_STATS_INDEX                           = 37,
1520     GEN9_AVC_MBENC_MAD_DATA_INDEX                           = 38,
1521     GEN9_AVC_MBENC_FORCE_NONSKIP_MB_MAP_INDEX               = 39,
1522     GEN9_AVC_MBENC_WIDI_WA_INDEX                            = 40,
1523     GEN9_AVC_MBENC_BRC_CURBE_DATA_INDEX                     = 41,
1524     GEN9_AVC_MBENC_SFD_COST_TABLE_INDEX                     = 42,
1525     GEN9_AVC_MBENC_MV_PREDICTOR_INDEX                       = 43,
1526     GEN9_AVC_MBENC_NUM_SURFACES_INDEX                       = 44
1527 } gen9_avc_binding_table_offset_mbenc;
1528
1529 typedef struct _gen9_avc_mbenc_curbe_data {
1530     struct {
1531         uint32_t skip_mode_enable: 1;
1532         uint32_t adaptive_enable: 1;
1533         uint32_t bi_mix_dis: 1;
1534         uint32_t reserved0: 2;
1535         uint32_t early_ime_success_enable: 1;
1536         uint32_t reserved1: 1;
1537         uint32_t t8x8_flag_for_inter_enable: 1;
1538         uint32_t reserved2: 16;
1539         uint32_t early_ime_stop: 8;
1540     } dw0;
1541
1542     struct {
1543         uint32_t max_num_mvs: 6;
1544         uint32_t reserved0: 10;
1545         uint32_t bi_weight: 6;
1546         uint32_t reserved1: 6;
1547         uint32_t uni_mix_disable: 1;
1548         uint32_t reserved2: 3;
1549     } dw1;
1550
1551     struct {
1552         uint32_t max_len_sp: 8;
1553         uint32_t max_num_su: 8;
1554         uint32_t pitch_width: 16;
1555     } dw2;
1556
1557     struct {
1558         uint32_t src_size: 2;
1559         uint32_t reserved0: 2;
1560         uint32_t mb_type_remap: 2;
1561         uint32_t src_access: 1;
1562         uint32_t ref_access: 1;
1563         uint32_t search_ctrl: 3;
1564         uint32_t dual_search_path_option: 1;
1565         uint32_t sub_pel_mode: 2;
1566         uint32_t skip_type: 1;
1567         uint32_t disable_field_cache_allocation: 1;
1568         uint32_t inter_chroma_mode: 1;
1569         uint32_t ftq_enable: 1;
1570         uint32_t bme_disable_fbr: 1;
1571         uint32_t block_based_skip_enable: 1;
1572         uint32_t inter_sad: 2;
1573         uint32_t intra_sad: 2;
1574         uint32_t sub_mb_part_mask: 7;
1575         uint32_t reserved1: 1;
1576     } dw3;
1577
1578     struct {
1579         uint32_t picture_height_minus1: 16;
1580         uint32_t mv_restriction_in_slice_enable: 1;
1581         uint32_t delta_mv_enable: 1;
1582         uint32_t true_distortion_enable: 1;
1583         uint32_t enable_wavefront_optimization: 1;
1584         uint32_t enable_fbr_bypass: 1;
1585         uint32_t enable_intra_cost_scaling_for_static_frame: 1;
1586         uint32_t reserved0: 1;
1587         uint32_t enable_widi_wa_surf: 1;
1588         uint32_t enable_widi_dirty_rect: 1;
1589         uint32_t enable_cur_fld_idr: 1;
1590         uint32_t contrained_intra_pred_flag: 1;
1591         uint32_t field_parity_flag: 1;
1592         uint32_t hme_enable: 1;
1593         uint32_t picture_type: 2;
1594         uint32_t use_actual_ref_qp_value: 1;
1595     } dw4;
1596
1597     struct {
1598         uint32_t slice_mb_height: 16;
1599         uint32_t ref_width: 8;
1600         uint32_t ref_height: 8;
1601     } dw5;
1602
1603     struct {
1604         uint32_t batch_buffer_end;
1605     } dw6;
1606
1607     struct {
1608         uint32_t intra_part_mask: 5;
1609         uint32_t non_skip_zmv_added: 1;
1610         uint32_t non_skip_mode_added: 1;
1611         uint32_t luma_intra_src_corner_swap: 1;
1612         uint32_t reserved0: 8;
1613         uint32_t mv_cost_scale_factor: 2;
1614         uint32_t bilinear_enable: 1;
1615         uint32_t src_field_polarity: 1;
1616         uint32_t weightedsad_harr: 1;
1617         uint32_t ac_only_haar: 1;
1618         uint32_t ref_id_cost_mode: 1;
1619         uint32_t reserved1: 1;
1620         uint32_t skip_center_mask: 8;
1621     } dw7;
1622
1623     struct {
1624         uint32_t mode_0_cost: 8;
1625         uint32_t mode_1_cost: 8;
1626         uint32_t mode_2_cost: 8;
1627         uint32_t mode_3_cost: 8;
1628     } dw8;
1629
1630     struct {
1631         uint32_t mode_4_cost: 8;
1632         uint32_t mode_5_cost: 8;
1633         uint32_t mode_6_cost: 8;
1634         uint32_t mode_7_cost: 8;
1635     } dw9;
1636
1637     struct {
1638         uint32_t mode_8_cost: 8;
1639         uint32_t mode_9_cost: 8;
1640         uint32_t ref_id_cost: 8;
1641         uint32_t chroma_intra_mode_cost: 8;
1642     } dw10;
1643
1644     union {
1645         struct {
1646             uint32_t mv_0_cost: 8;
1647             uint32_t mv_1_cost: 8;
1648             uint32_t mv_2_cost: 8;
1649             uint32_t mv_3_cost: 8;
1650         };
1651         uint32_t value;
1652     } dw11;
1653
1654     struct {
1655         uint32_t mv_4_cost: 8;
1656         uint32_t mv_5_cost: 8;
1657         uint32_t mv_6_cost: 8;
1658         uint32_t mv_7_cost: 8;
1659     } dw12;
1660
1661     struct {
1662         uint32_t qp_prime_y: 8;
1663         uint32_t qp_prime_cb: 8;
1664         uint32_t qp_prime_cr: 8;
1665         uint32_t target_size_in_word: 8;
1666     } dw13;
1667
1668     struct {
1669         uint32_t sic_fwd_transcoeff_threshold_0: 16;
1670         uint32_t sic_fwd_transcoeff_threshold_1: 8;
1671         uint32_t sic_fwd_transcoeff_threshold_2: 8;
1672     } dw14;
1673
1674     struct {
1675         uint32_t sic_fwd_transcoeff_threshold_3: 8;
1676         uint32_t sic_fwd_transcoeff_threshold_4: 8;
1677         uint32_t sic_fwd_transcoeff_threshold_5: 8;
1678         uint32_t sic_fwd_transcoeff_threshold_6: 8;
1679     } dw15;
1680
1681     struct {
1682         struct generic_search_path_delta sp_delta_0;
1683         struct generic_search_path_delta sp_delta_1;
1684         struct generic_search_path_delta sp_delta_2;
1685         struct generic_search_path_delta sp_delta_3;
1686     } dw16;
1687
1688     struct {
1689         struct generic_search_path_delta sp_delta_4;
1690         struct generic_search_path_delta sp_delta_5;
1691         struct generic_search_path_delta sp_delta_6;
1692         struct generic_search_path_delta sp_delta_7;
1693     } dw17;
1694
1695     struct {
1696         struct generic_search_path_delta sp_delta_8;
1697         struct generic_search_path_delta sp_delta_9;
1698         struct generic_search_path_delta sp_delta_10;
1699         struct generic_search_path_delta sp_delta_11;
1700     } dw18;
1701
1702     struct {
1703         struct generic_search_path_delta sp_delta_12;
1704         struct generic_search_path_delta sp_delta_13;
1705         struct generic_search_path_delta sp_delta_14;
1706         struct generic_search_path_delta sp_delta_15;
1707     } dw19;
1708
1709     struct {
1710         struct generic_search_path_delta sp_delta_16;
1711         struct generic_search_path_delta sp_delta_17;
1712         struct generic_search_path_delta sp_delta_18;
1713         struct generic_search_path_delta sp_delta_19;
1714     } dw20;
1715
1716     struct {
1717         struct generic_search_path_delta sp_delta_20;
1718         struct generic_search_path_delta sp_delta_21;
1719         struct generic_search_path_delta sp_delta_22;
1720         struct generic_search_path_delta sp_delta_23;
1721     } dw21;
1722
1723     struct {
1724         struct generic_search_path_delta sp_delta_24;
1725         struct generic_search_path_delta sp_delta_25;
1726         struct generic_search_path_delta sp_delta_26;
1727         struct generic_search_path_delta sp_delta_27;
1728     } dw22;
1729
1730     struct {
1731         struct generic_search_path_delta sp_delta_28;
1732         struct generic_search_path_delta sp_delta_29;
1733         struct generic_search_path_delta sp_delta_30;
1734         struct generic_search_path_delta sp_delta_31;
1735     } dw23;
1736
1737     struct {
1738         struct generic_search_path_delta sp_delta_32;
1739         struct generic_search_path_delta sp_delta_33;
1740         struct generic_search_path_delta sp_delta_34;
1741         struct generic_search_path_delta sp_delta_35;
1742     } dw24;
1743
1744     struct {
1745         struct generic_search_path_delta sp_delta_36;
1746         struct generic_search_path_delta sp_delta_37;
1747         struct generic_search_path_delta sp_delta_38;
1748         struct generic_search_path_delta sp_delta_39;
1749     } dw25;
1750
1751     struct {
1752         struct generic_search_path_delta sp_delta_40;
1753         struct generic_search_path_delta sp_delta_41;
1754         struct generic_search_path_delta sp_delta_42;
1755         struct generic_search_path_delta sp_delta_43;
1756     } dw26;
1757
1758     struct {
1759         struct generic_search_path_delta sp_delta_44;
1760         struct generic_search_path_delta sp_delta_45;
1761         struct generic_search_path_delta sp_delta_46;
1762         struct generic_search_path_delta sp_delta_47;
1763     } dw27;
1764
1765     struct {
1766         struct generic_search_path_delta sp_delta_48;
1767         struct generic_search_path_delta sp_delta_49;
1768         struct generic_search_path_delta sp_delta_50;
1769         struct generic_search_path_delta sp_delta_51;
1770     } dw28;
1771
1772     struct {
1773         struct generic_search_path_delta sp_delta_52;
1774         struct generic_search_path_delta sp_delta_53;
1775         struct generic_search_path_delta sp_delta_54;
1776         struct generic_search_path_delta sp_delta_55;
1777     } dw29;
1778
1779     struct {
1780         uint32_t intra_4x4_mode_mask: 9;
1781         uint32_t reserved0: 7;
1782         uint32_t intra_8x8_mode_mask: 9;
1783         uint32_t reserved1: 7;
1784     } dw30;
1785
1786     struct {
1787         uint32_t intra_16x16_mode_mask: 4;
1788         uint32_t intra_chroma_mode_mask: 4;
1789         uint32_t intra_compute_type: 2;
1790         uint32_t reserved0: 22;
1791     } dw31;
1792
1793     struct {
1794         uint32_t skip_val: 16;
1795         uint32_t mult_pred_l0_disable: 8;
1796         uint32_t mult_pred_l1_disable: 8;
1797     } dw32;
1798
1799     struct {
1800         uint32_t intra_16x16_nondc_penalty: 8;
1801         uint32_t intra_8x8_nondc_penalty: 8;
1802         uint32_t intra_4x4_nondc_penalty: 8;
1803         uint32_t reserved0: 8;
1804     } dw33;
1805
1806     struct {
1807         uint32_t list0_ref_id0_field_parity: 1;
1808         uint32_t list0_ref_id1_field_parity: 1;
1809         uint32_t list0_ref_id2_field_parity: 1;
1810         uint32_t list0_ref_id3_field_parity: 1;
1811         uint32_t list0_ref_id4_field_parity: 1;
1812         uint32_t list0_ref_id5_field_parity: 1;
1813         uint32_t list0_ref_id6_field_parity: 1;
1814         uint32_t list0_ref_id7_field_parity: 1;
1815         uint32_t list1_ref_id0_frm_field_parity: 1;
1816         uint32_t list1_ref_id1_frm_field_parity: 1;
1817         uint32_t widi_intra_refresh_en: 2;
1818         uint32_t arbitray_num_mbs_per_slice: 1;
1819         uint32_t enable_adaptive_tx_decision: 1;
1820         uint32_t force_non_skip_check: 1;
1821         uint32_t disable_enc_skip_check: 1;
1822         uint32_t enable_direct_bias_adjustment: 1;
1823         uint32_t b_force_to_skip: 1;
1824         uint32_t enable_global_motion_bias_adjustment: 1;
1825         uint32_t enable_adaptive_search_window_size: 1;
1826         uint32_t enable_per_mb_static_check: 1;
1827         uint32_t reserved0: 3;
1828         uint32_t list1_ref_id0_field_parity: 1;
1829         uint32_t list1_ref_id1_field_parity: 1;
1830         uint32_t mad_enable_falg: 1;
1831         uint32_t roi_enable_flag: 1;
1832         uint32_t enable_mb_flatness_check_optimization: 1;
1833         uint32_t b_direct_mode: 1;
1834         uint32_t mb_brc_enable: 1;
1835         uint32_t b_original_bff: 1;
1836     } dw34;
1837
1838     struct {
1839         uint32_t panic_mode_mb_threshold: 16;
1840         uint32_t small_mb_size_in_word: 8;
1841         uint32_t large_mb_size_in_word: 8;
1842     } dw35;
1843
1844     struct {
1845         uint32_t num_ref_idx_l0_minus_one: 8;
1846         uint32_t hme_combined_extra_sus: 8;
1847         uint32_t num_ref_idx_l1_minus_one: 8;
1848         uint32_t reserved0: 4;
1849         uint32_t is_fwd_frame_short_term_ref: 1;
1850         uint32_t check_all_fractional_enable: 1;
1851         uint32_t hme_combine_overlap: 2;
1852     } dw36;
1853
1854     struct {
1855         uint32_t skip_mode_enable: 1;
1856         uint32_t adaptive_enable: 1;
1857         uint32_t bi_mix_dis: 1;
1858         uint32_t reserved0: 2;
1859         uint32_t early_ime_success_enable: 1;
1860         uint32_t reserved1: 1;
1861         uint32_t t8x8_flag_for_inter_enable: 1;
1862         uint32_t reserved2: 16;
1863         uint32_t early_ime_stop: 8;
1864     } dw37;
1865
1866     /* reserved */
1867     struct {
1868         uint32_t max_len_sp: 8;
1869         uint32_t max_num_su: 8;
1870         uint32_t ref_threshold: 16;
1871     } dw38;
1872
1873     struct {
1874         uint32_t reserved0: 8;
1875         uint32_t hme_ref_windows_comb_threshold: 8;
1876         uint32_t ref_width: 8;
1877         uint32_t ref_height: 8;
1878     } dw39;
1879
1880     struct {
1881         uint32_t dist_scale_factor_ref_id0_list0: 16;
1882         uint32_t dist_scale_factor_ref_id1_list0: 16;
1883     } dw40;
1884
1885     struct {
1886         uint32_t dist_scale_factor_ref_id2_list0: 16;
1887         uint32_t dist_scale_factor_ref_id3_list0: 16;
1888     } dw41;
1889
1890     struct {
1891         uint32_t dist_scale_factor_ref_id4_list0: 16;
1892         uint32_t dist_scale_factor_ref_id5_list0: 16;
1893     } dw42;
1894
1895     struct {
1896         uint32_t dist_scale_factor_ref_id6_list0: 16;
1897         uint32_t dist_scale_factor_ref_id7_list0: 16;
1898     } dw43;
1899
1900     struct {
1901         uint32_t actual_qp_value_for_ref_id0_list0: 8;
1902         uint32_t actual_qp_value_for_ref_id1_list0: 8;
1903         uint32_t actual_qp_value_for_ref_id2_list0: 8;
1904         uint32_t actual_qp_value_for_ref_id3_list0: 8;
1905     } dw44;
1906
1907     struct {
1908         uint32_t actual_qp_value_for_ref_id4_list0: 8;
1909         uint32_t actual_qp_value_for_ref_id5_list0: 8;
1910         uint32_t actual_qp_value_for_ref_id6_list0: 8;
1911         uint32_t actual_qp_value_for_ref_id7_list0: 8;
1912     } dw45;
1913
1914     struct {
1915         uint32_t actual_qp_value_for_ref_id0_list1: 8;
1916         uint32_t actual_qp_value_for_ref_id1_list1: 8;
1917         uint32_t ref_cost: 16;
1918     } dw46;
1919
1920     struct {
1921         uint32_t mb_qp_read_factor: 8;
1922         uint32_t intra_cost_sf: 8;
1923         uint32_t max_vmv_r: 16;
1924     } dw47;
1925
1926     struct {
1927         uint32_t widi_intra_refresh_mb_num: 16;
1928         uint32_t widi_intra_refresh_unit_in_mb_minus1: 8;
1929         uint32_t widi_intra_refresh_qp_delta: 8;
1930     } dw48;
1931
1932     struct {
1933         uint32_t roi_1_x_left: 16;
1934         uint32_t roi_1_y_top: 16;
1935     } dw49;
1936
1937     struct {
1938         uint32_t roi_1_x_right: 16;
1939         uint32_t roi_1_y_bottom: 16;
1940     } dw50;
1941
1942     struct {
1943         uint32_t roi_2_x_left: 16;
1944         uint32_t roi_2_y_top: 16;
1945     } dw51;
1946
1947     struct {
1948         uint32_t roi_2_x_right: 16;
1949         uint32_t roi_2_y_bottom: 16;
1950     } dw52;
1951
1952     struct {
1953         uint32_t roi_3_x_left: 16;
1954         uint32_t roi_3_y_top: 16;
1955     } dw53;
1956
1957     struct {
1958         uint32_t roi_3_x_right: 16;
1959         uint32_t roi_3_y_bottom: 16;
1960     } dw54;
1961
1962     struct {
1963         uint32_t roi_4_x_left: 16;
1964         uint32_t roi_4_y_top: 16;
1965     } dw55;
1966
1967     struct {
1968         uint32_t roi_4_x_right: 16;
1969         uint32_t roi_4_y_bottom: 16;
1970     } dw56;
1971
1972     struct {
1973         uint32_t roi_1_dqp_prime_y: 8;
1974         uint32_t roi_2_dqp_prime_y: 8;
1975         uint32_t roi_3_dqp_prime_y: 8;
1976         uint32_t roi_4_dqp_prime_y: 8;
1977     } dw57;
1978
1979     struct {
1980         uint32_t mb_texture_threshold: 16;
1981         uint32_t tx_decision_threshold: 16;
1982     } dw58;
1983
1984     struct {
1985         uint32_t hme_mv_cost_scaling_factor: 8;
1986         uint32_t reserved0: 24;
1987     } dw59;
1988
1989     struct {
1990         uint32_t reserved;
1991     } dw60;
1992
1993     struct {
1994         uint32_t reserved;
1995     } dw61;
1996
1997     struct {
1998         uint32_t reserved;
1999     } dw62;
2000
2001     struct {
2002         uint32_t reserved;
2003     } dw63;
2004
2005     struct {
2006         uint32_t mb_data_surf_index;
2007     } dw64;
2008
2009     struct {
2010         uint32_t mv_data_surf_index;
2011     } dw65;
2012
2013     struct {
2014         uint32_t i_dist_surf_index;
2015     } dw66;
2016
2017     struct {
2018         uint32_t src_y_surf_index;
2019     } dw67;
2020
2021     struct {
2022         uint32_t mb_specific_data_surf_index;
2023     } dw68;
2024
2025     struct {
2026         uint32_t aux_vme_out_surf_index;
2027     } dw69;
2028
2029     struct {
2030         uint32_t curr_ref_pic_sel_surf_index;
2031     } dw70;
2032
2033     struct {
2034         uint32_t hme_mv_pred_fwd_bwd_surf_index;
2035     } dw71;
2036
2037     struct {
2038         uint32_t hme_dist_surf_index;
2039     } dw72;
2040
2041     struct {
2042         uint32_t slice_map_surf_index;
2043     } dw73;
2044
2045     struct {
2046         uint32_t fwd_frm_mb_data_surf_index;
2047     } dw74;
2048
2049     struct {
2050         uint32_t fwd_frm_mv_surf_index;
2051     } dw75;
2052
2053     struct {
2054         uint32_t mb_qp_buffer;
2055     } dw76;
2056
2057     struct {
2058         uint32_t mb_brc_lut;
2059     } dw77;
2060
2061     struct {
2062         uint32_t vme_inter_prediction_surf_index;
2063     } dw78;
2064
2065     struct {
2066         uint32_t vme_inter_prediction_mr_surf_index;
2067     } dw79;
2068
2069     struct {
2070         uint32_t mb_stats_surf_index;
2071     } dw80;
2072
2073     struct {
2074         uint32_t mad_surf_index;
2075     } dw81;
2076
2077     struct {
2078         uint32_t force_non_skip_mb_map_surface;
2079     } dw82;
2080
2081     struct {
2082         uint32_t widi_wa_surf_index;
2083     } dw83;
2084
2085     struct {
2086         uint32_t brc_curbe_surf_index;
2087     } dw84;
2088
2089     struct {
2090         uint32_t static_detection_cost_table_index;
2091     } dw85;
2092
2093     struct {
2094         uint32_t reserved0;
2095     } dw86;
2096
2097     struct {
2098         uint32_t reserved0;
2099     } dw87;
2100
2101 } gen9_avc_mbenc_curbe_data;
2102
2103 #define GEN9_AVC_KERNEL_MBENC_QUALITY_I            0
2104 #define GEN9_AVC_KERNEL_MBENC_QUALITY_P            1
2105 #define GEN9_AVC_KERNEL_MBENC_QUALITY_B            2
2106 #define GEN9_AVC_KERNEL_MBENC_NORMAL_I             3
2107 #define GEN9_AVC_KERNEL_MBENC_NORMAL_P             4
2108 #define GEN9_AVC_KERNEL_MBENC_NORMAL_B             5
2109 #define GEN9_AVC_KERNEL_MBENC_PERFORMANCE_I        6
2110 #define GEN9_AVC_KERNEL_MBENC_PERFORMANCE_P        7
2111 #define GEN9_AVC_KERNEL_MBENC_PERFORMANCE_B        8
2112 #define NUM_GEN9_AVC_KERNEL_MBENC                  9
2113
2114 /* structure holding AVC FEI mbenc Curbe data */
2115 typedef struct _gen9_avc_fei_mbenc_curbe_data {
2116     /* dw0:  M1.0 defined in the VME message header/payload */
2117     struct {
2118         uint32_t skip_mode_enable: 1;
2119         uint32_t adaptive_enable: 1;
2120         uint32_t bi_mix_diable: 1;
2121         uint32_t reserved0: 2;
2122         uint32_t early_ime_success_enable: 1;
2123         uint32_t reserved1: 1;
2124         uint32_t t8x8_flag_for_inter_enable: 1;
2125         uint32_t reserved2: 16;
2126         uint32_t early_ime_stop: 8;
2127     } dw0;
2128
2129     /* dw1: M1.1 defined in the VME message header/payload */
2130     struct {
2131         uint32_t max_num_mvs: 6;
2132         uint32_t reserved0: 10;
2133         uint32_t bi_Weight: 6;
2134         uint32_t reserved1: 6;
2135         uint32_t uni_mix_disable: 1;
2136         uint32_t reserved2: 3;
2137     } dw1;
2138     /* dw2: lower 16bits in M1.2 defined in the VME message header/payload */
2139     struct {
2140         uint32_t max_len_sp: 8;
2141         uint32_t max_num_su: 8;
2142         uint32_t pic_width: 16;
2143     } dw2;
2144
2145     /* dw3: M0.3 defined in the VME message header/payload */
2146     struct {
2147         uint32_t src_size: 2;
2148         uint32_t reserved0: 1;
2149         uint32_t reserved1: 1;
2150         uint32_t mb_type_remap: 2;
2151         uint32_t src_access: 1;
2152         uint32_t ref_access: 1;
2153         uint32_t search_ctrl: 3;
2154         uint32_t dual_search_path_option: 1;
2155         uint32_t sub_pel_mode: 2;
2156         uint32_t skip_type: 1;
2157         uint32_t disable_field_cache_allocation: 1;
2158         uint32_t inter_chroma_mode: 1;
2159         uint32_t ft_enable: 1;
2160         uint32_t bme_disable_fbr: 1;
2161         uint32_t block_based_skip_enable: 1;
2162         uint32_t inter_sad: 2;
2163         uint32_t Intra_sad: 2;
2164         uint32_t sub_mb_part_mask: 7;
2165         uint32_t reserved2: 1;
2166     } dw3;
2167
2168     /* dw4 */
2169     struct {
2170         uint32_t pic_height_minus1: 16;
2171         uint32_t mv_restriction_in_slice_enable: 1;
2172         uint32_t delta_mv_enable: 1;
2173         uint32_t true_distortion_enable: 1;
2174         uint32_t enable_wavefront_optimization: 1;
2175         uint32_t enable_fbr_bypass: 1;
2176         uint32_t enable_intra_cost_scaling_for_static_frame: 1;
2177         uint32_t reserved0: 1;
2178         uint32_t enable_widi_wa_s: 1;
2179         uint32_t enable_widi_dirty_rect: 1;
2180         uint32_t enable_cur_fld_idr: 1;
2181         uint32_t constrained_intra_pred_flag: 1;
2182         uint32_t field_parity_flag: 1;
2183         uint32_t hme_enable: 1;
2184         uint32_t picture_type: 2;
2185         uint32_t use_actual_ref_qp_value: 1;
2186     } dw4;
2187
2188     /* dw5: M0.5 defined in the VME message header/payload */
2189     struct {
2190         uint32_t slice_mb_height: 16;
2191         uint32_t ref_width: 8;
2192         uint32_t ref_height: 8;
2193     } dw5;
2194
2195     /* dw6 */
2196     struct {
2197         uint32_t batch_buffer_end: 32;
2198     } dw6;
2199
2200     /* dw7:  M1.7 defined in the VME message header/payload */
2201     struct {
2202         uint32_t intra_part_mask: 5;
2203         uint32_t non_skip_zmv_added: 1;
2204         uint32_t non_skip_mode_added: 1;
2205         uint32_t luma_intra_src_corner_swap: 1;
2206         uint32_t reserved0: 8;
2207         uint32_t mv_cost_scale_factor: 2;
2208         uint32_t bilinear_enable: 1;
2209         uint32_t src_field_polarity: 1;
2210         uint32_t weightedsad_haar: 1;
2211         uint32_t ac_only_haar: 1;
2212         uint32_t ref_id_cost_mode: 1;
2213         uint32_t reserved1: 1;
2214         uint32_t skip_center_mask: 8;
2215     } dw7;
2216
2217     /* dw8 */
2218     struct {
2219         uint32_t mode_0_cost: 8;
2220         uint32_t mode_1_cost: 8;
2221         uint32_t mode_2_cost: 8;
2222         uint32_t mode_3_cost: 8;
2223     } dw8;
2224
2225     /* dw9 */
2226     struct {
2227         uint32_t mode_4_cost: 8;
2228         uint32_t mode_5_cost: 8;
2229         uint32_t mode_6_cost: 8;
2230         uint32_t mode_7_cost: 8;
2231     } dw9;
2232
2233     /* dw10 */
2234     struct {
2235         uint32_t mode_8_cost: 8;
2236         uint32_t mode_9_cost: 8;
2237         uint32_t ref_id_cost: 8;
2238         uint32_t chroma_intra_mode_cost: 8;
2239     } dw10;
2240
2241     /* dw11 */
2242     union {
2243         struct {
2244             uint32_t mv_0_cost: 8;
2245             uint32_t mv_1_cost: 8;
2246             uint32_t mv_2_cost: 8;
2247             uint32_t mv_3_cost: 8;
2248         };
2249         uint32_t value;
2250     } dw11;
2251
2252     /* dw12 */
2253     struct {
2254         uint32_t mv_4_cost: 8;
2255         uint32_t mv_5_cost: 8;
2256         uint32_t mv_6_cost: 8;
2257         uint32_t mv_7_cost: 8;
2258     } dw12;
2259
2260     /* dw13 */
2261     struct {
2262         uint32_t qp_prime_y: 8;
2263         uint32_t qp_prime_cb: 8;
2264         uint32_t qp_prime_cr: 8;
2265         uint32_t target_size_in_word: 8;
2266     } dw13;
2267
2268     struct {
2269         uint32_t sic_fwd_transcoeff_threshold_0: 16;
2270         uint32_t sic_fwd_transcoeff_threshold_1: 8;
2271         uint32_t sic_fwd_transcoeff_threshold_2: 8;
2272     } dw14;
2273
2274     struct {
2275         uint32_t sic_fwd_transcoeff_threshold_3: 8;
2276         uint32_t sic_fwd_transcoeff_threshold_4: 8;
2277         uint32_t sic_fwd_transcoeff_threshold_5: 8;
2278         uint32_t sic_fwd_transcoeff_threshold_6: 8;
2279     } dw15;
2280
2281     struct {
2282         struct generic_search_path_delta sp_delta_0;
2283         struct generic_search_path_delta sp_delta_1;
2284         struct generic_search_path_delta sp_delta_2;
2285         struct generic_search_path_delta sp_delta_3;
2286     } dw16;
2287
2288     struct {
2289         struct generic_search_path_delta sp_delta_4;
2290         struct generic_search_path_delta sp_delta_5;
2291         struct generic_search_path_delta sp_delta_6;
2292         struct generic_search_path_delta sp_delta_7;
2293     } dw17;
2294
2295     struct {
2296         struct generic_search_path_delta sp_delta_8;
2297         struct generic_search_path_delta sp_delta_9;
2298         struct generic_search_path_delta sp_delta_10;
2299         struct generic_search_path_delta sp_delta_11;
2300     } dw18;
2301
2302     struct {
2303         struct generic_search_path_delta sp_delta_12;
2304         struct generic_search_path_delta sp_delta_13;
2305         struct generic_search_path_delta sp_delta_14;
2306         struct generic_search_path_delta sp_delta_15;
2307     } dw19;
2308
2309     struct {
2310         struct generic_search_path_delta sp_delta_16;
2311         struct generic_search_path_delta sp_delta_17;
2312         struct generic_search_path_delta sp_delta_18;
2313         struct generic_search_path_delta sp_delta_19;
2314     } dw20;
2315
2316     struct {
2317         struct generic_search_path_delta sp_delta_20;
2318         struct generic_search_path_delta sp_delta_21;
2319         struct generic_search_path_delta sp_delta_22;
2320         struct generic_search_path_delta sp_delta_23;
2321     } dw21;
2322
2323     struct {
2324         struct generic_search_path_delta sp_delta_24;
2325         struct generic_search_path_delta sp_delta_25;
2326         struct generic_search_path_delta sp_delta_26;
2327         struct generic_search_path_delta sp_delta_27;
2328     } dw22;
2329
2330     struct {
2331         struct generic_search_path_delta sp_delta_28;
2332         struct generic_search_path_delta sp_delta_29;
2333         struct generic_search_path_delta sp_delta_30;
2334         struct generic_search_path_delta sp_delta_31;
2335     } dw23;
2336
2337     struct {
2338         struct generic_search_path_delta sp_delta_32;
2339         struct generic_search_path_delta sp_delta_33;
2340         struct generic_search_path_delta sp_delta_34;
2341         struct generic_search_path_delta sp_delta_35;
2342     } dw24;
2343
2344     struct {
2345         struct generic_search_path_delta sp_delta_36;
2346         struct generic_search_path_delta sp_delta_37;
2347         struct generic_search_path_delta sp_delta_38;
2348         struct generic_search_path_delta sp_delta_39;
2349     } dw25;
2350
2351     struct {
2352         struct generic_search_path_delta sp_delta_40;
2353         struct generic_search_path_delta sp_delta_41;
2354         struct generic_search_path_delta sp_delta_42;
2355         struct generic_search_path_delta sp_delta_43;
2356     } dw26;
2357
2358     struct {
2359         struct generic_search_path_delta sp_delta_44;
2360         struct generic_search_path_delta sp_delta_45;
2361         struct generic_search_path_delta sp_delta_46;
2362         struct generic_search_path_delta sp_delta_47;
2363     } dw27;
2364
2365     struct {
2366         struct generic_search_path_delta sp_delta_48;
2367         struct generic_search_path_delta sp_delta_49;
2368         struct generic_search_path_delta sp_delta_50;
2369         struct generic_search_path_delta sp_delta_51;
2370     } dw28;
2371
2372     struct {
2373         struct generic_search_path_delta sp_delta_52;
2374         struct generic_search_path_delta sp_delta_53;
2375         struct generic_search_path_delta sp_delta_54;
2376         struct generic_search_path_delta sp_delta_55;
2377     } dw29;
2378
2379     struct {
2380         uint32_t intra_4x4_mode_mask: 9;
2381         uint32_t reserved0: 7;
2382         uint32_t intra_8x8_mode_mask: 9;
2383         uint32_t reserved1: 7;
2384     } dw30;
2385
2386     struct {
2387         uint32_t intra_16x16_mode_mask: 4;
2388         uint32_t intra_chroma_mode_mask: 4;
2389         uint32_t intra_compute_type: 2;
2390         uint32_t reserved0: 22;
2391     } dw31;
2392
2393     struct {
2394         uint32_t skip_val: 16;
2395         uint32_t mult_pred_l0_disable: 8;
2396         uint32_t mult_pred_l1_disable: 8;
2397     } dw32;
2398
2399     struct {
2400         uint32_t intra_16x16_nondc_penalty: 8;
2401         uint32_t intra_8x8_nondc_penalty: 8;
2402         uint32_t intra_4x4_nondc_penalty: 8;
2403         uint32_t reserved0: 8;
2404     } dw33;
2405
2406     struct {
2407         uint32_t list0_ref_id0_field_parity: 1;
2408         uint32_t list0_ref_id1_field_parity: 1;
2409         uint32_t list0_ref_id2_field_parity: 1;
2410         uint32_t list0_ref_id3_field_parity: 1;
2411         uint32_t list0_ref_id4_field_parity: 1;
2412         uint32_t list0_ref_id5_field_parity: 1;
2413         uint32_t list0_ref_id6_field_parity: 1;
2414         uint32_t list0_ref_id7_field_parity: 1;
2415         uint32_t list1_ref_id0_frm_field_parity: 1;
2416         uint32_t list1_ref_id1_frm_field_parity: 1;
2417         uint32_t widi_intra_refresh_en: 2;
2418         uint32_t arbitray_num_mbs_per_slice: 1;
2419         uint32_t enable_adaptive_tx_decision: 1;
2420         uint32_t force_non_skip_check: 1;
2421         uint32_t disable_enc_skip_check: 1;
2422         uint32_t enable_direct_bias_adjustment: 1;
2423         uint32_t b_force_to_skip: 1;
2424         uint32_t enable_global_motion_bias_adjustment: 1;
2425         uint32_t enable_adaptive_search_window_size: 1;
2426         uint32_t enable_per_mb_static_check: 1;
2427         uint32_t reserved0: 3;
2428         uint32_t list1_ref_id0_field_parity: 1;
2429         uint32_t list1_ref_id1_field_parity: 1;
2430         uint32_t mad_enable_falg: 1;
2431         uint32_t roi_enable_flag: 1;
2432         uint32_t enable_mb_flatness_check_optimization: 1;
2433         uint32_t b_direct_mode: 1;
2434         uint32_t mb_brc_enable: 1;
2435         uint32_t b_original_bff: 1;
2436     } dw34;
2437
2438     struct {
2439         uint32_t panic_mode_mb_threshold: 16;
2440         uint32_t small_mb_size_in_word: 8;
2441         uint32_t large_mb_size_in_word: 8;
2442     } dw35;
2443
2444     struct {
2445         uint32_t num_ref_idx_l0_minus_one: 8;
2446         uint32_t hme_combined_extra_sus: 8;
2447         uint32_t num_ref_idx_l1_minus_one: 8;
2448         uint32_t reserved0: 4;
2449         uint32_t is_fwd_frame_short_term_ref: 1;
2450         uint32_t check_all_fractional_enable: 1;
2451         uint32_t hme_combine_overlap: 2;
2452     } dw36;
2453
2454     struct {
2455         uint32_t skip_mode_enable: 1;
2456         uint32_t adaptive_enable: 1;
2457         uint32_t bi_mix_dis: 1;
2458         uint32_t reserved0: 2;
2459         uint32_t early_ime_success_enable: 1;
2460         uint32_t reserved1: 1;
2461         uint32_t t8x8_flag_for_inter_enable: 1;
2462         uint32_t reserved2: 16;
2463         uint32_t early_ime_stop: 8;
2464     } dw37;
2465
2466     /* reserved */
2467     struct {
2468         uint32_t max_len_sp: 8;
2469         uint32_t max_num_su: 8;
2470         uint32_t ref_threshold: 16;
2471     } dw38;
2472
2473     struct {
2474         uint32_t reserved0: 8;
2475         uint32_t hme_ref_windows_comb_threshold: 8;
2476         uint32_t ref_width: 8;
2477         uint32_t ref_height: 8;
2478     } dw39;
2479
2480     struct {
2481         uint32_t dist_scale_factor_ref_id0_list0: 16;
2482         uint32_t dist_scale_factor_ref_id1_list0: 16;
2483     } dw40;
2484
2485     struct {
2486         uint32_t dist_scale_factor_ref_id2_list0: 16;
2487         uint32_t dist_scale_factor_ref_id3_list0: 16;
2488     } dw41;
2489
2490     struct {
2491         uint32_t dist_scale_factor_ref_id4_list0: 16;
2492         uint32_t dist_scale_factor_ref_id5_list0: 16;
2493     } dw42;
2494
2495     struct {
2496         uint32_t dist_scale_factor_ref_id6_list0: 16;
2497         uint32_t dist_scale_factor_ref_id7_list0: 16;
2498     } dw43;
2499
2500     struct {
2501         uint32_t actual_qp_value_for_ref_id0_list0: 8;
2502         uint32_t actual_qp_value_for_ref_id1_list0: 8;
2503         uint32_t actual_qp_value_for_ref_id2_list0: 8;
2504         uint32_t actual_qp_value_for_ref_id3_list0: 8;
2505     } dw44;
2506
2507     struct {
2508         uint32_t actual_qp_value_for_ref_id4_list0: 8;
2509         uint32_t actual_qp_value_for_ref_id5_list0: 8;
2510         uint32_t actual_qp_value_for_ref_id6_list0: 8;
2511         uint32_t actual_qp_value_for_ref_id7_list0: 8;
2512     } dw45;
2513
2514     struct {
2515         uint32_t actual_qp_value_for_ref_id0_list1: 8;
2516         uint32_t actual_qp_value_for_ref_id1_list1: 8;
2517         uint32_t ref_cost: 16;
2518     } dw46;
2519
2520     struct {
2521         uint32_t mb_qp_read_factor: 8;
2522         uint32_t intra_cost_sf: 8;
2523         uint32_t max_vmv_r: 16;
2524     } dw47;
2525
2526     struct {
2527         uint32_t widi_intra_refresh_mb_num: 16;
2528         uint32_t widi_intra_refresh_unit_in_mb_minus1: 8;
2529         uint32_t widi_intra_refresh_qp_delta: 8;
2530     } dw48;
2531
2532     struct {
2533         uint32_t roi_1_x_left: 16;
2534         uint32_t roi_1_y_top: 16;
2535     } dw49;
2536
2537     struct {
2538         uint32_t roi_1_x_right: 16;
2539         uint32_t roi_1_y_bottom: 16;
2540     } dw50;
2541
2542     struct {
2543         uint32_t roi_2_x_left: 16;
2544         uint32_t roi_2_y_top: 16;
2545     } dw51;
2546
2547     struct {
2548         uint32_t roi_2_x_right: 16;
2549         uint32_t roi_2_y_bottom: 16;
2550     } dw52;
2551
2552     struct {
2553         uint32_t roi_3_x_left: 16;
2554         uint32_t roi_3_y_top: 16;
2555     } dw53;
2556
2557     struct {
2558         uint32_t roi_3_x_right: 16;
2559         uint32_t roi_3_y_bottom: 16;
2560     } dw54;
2561
2562     struct {
2563         uint32_t roi_4_x_left: 16;
2564         uint32_t roi_4_y_top: 16;
2565     } dw55;
2566
2567     struct {
2568         uint32_t roi_4_x_right: 16;
2569         uint32_t roi_4_y_bottom: 16;
2570     } dw56;
2571
2572     struct {
2573         uint32_t roi_1_dqp_prime_y: 8;
2574         uint32_t roi_2_dqp_prime_y: 8;
2575         uint32_t roi_3_dqp_prime_y: 8;
2576         uint32_t roi_4_dqp_prime_y: 8;
2577     } dw57;
2578
2579     struct {
2580         uint32_t mb_texture_threshold: 16;
2581         uint32_t tx_decision_threshold: 16;
2582     } dw58;
2583
2584     struct {
2585         uint32_t hme_mv_cost_scaling_factor: 8;
2586         uint32_t reserved0: 24;
2587     } dw59;
2588
2589     struct {
2590         uint32_t reserved;
2591     } dw60;
2592
2593     struct {
2594         uint32_t reserved;
2595     } dw61;
2596
2597     struct {
2598         uint32_t reserved;
2599     } dw62;
2600
2601     struct {
2602         uint32_t reserved;
2603     } dw63;
2604
2605     /* dw64 */
2606     struct {
2607         uint32_t   num_mv_predictors_l0: 4;
2608         uint32_t   fei_enable: 1;
2609         uint32_t   multiple_mv_predictor_per_mb_enable: 1;
2610         uint32_t   vme_distortion_output_enable: 1;
2611         uint32_t   per_mb_qp_enable: 1;
2612         uint32_t   mb_input_enable: 1;
2613         uint32_t   fei_mode: 1;
2614         uint32_t   num_mv_predictors_l1: 4;
2615         uint32_t   reserved: 18;
2616     } dw64;
2617
2618     /* dw65 */
2619     struct {
2620         uint32_t reserved: 32;
2621     } dw65;
2622
2623     /* dw66 */
2624     struct {
2625         uint32_t reserved: 32;
2626     } dw66;
2627
2628     /* dw67 */
2629     struct {
2630         uint32_t reserved: 32;
2631     } dw67;
2632
2633     /* dw68 */
2634     struct {
2635         uint32_t reserved: 32;
2636     } dw68;
2637
2638     /* dw69 */
2639     struct {
2640         uint32_t reserved: 32;
2641     } dw69;
2642
2643     /* dw70 */
2644     struct {
2645         uint32_t reserved: 32;
2646     } dw70;
2647
2648     /* dw71 */
2649     struct {
2650         uint32_t reserved: 32;
2651     } dw71;
2652
2653     /* dw72 */
2654     struct {
2655         uint32_t reserved: 32;
2656     } dw72;
2657
2658     /* dw73 */
2659     struct {
2660         uint32_t reserved: 32;
2661     } dw73;
2662
2663     /* dw74 */
2664     struct {
2665         uint32_t reserved: 32;
2666     } dw74;
2667
2668     /* dw75 */
2669     struct {
2670         uint32_t reserved: 32;
2671     } dw75;
2672
2673     /* dw76 */
2674     struct {
2675         uint32_t reserved: 32;
2676     } dw76;
2677
2678     /* dw77 */
2679     struct {
2680         uint32_t reserved: 32;
2681     } dw77;
2682
2683     /* dw78 */
2684     struct {
2685         uint32_t reserved: 32;
2686     } dw78;
2687
2688     /* dw79 */
2689     struct {
2690         uint32_t reserved: 32;
2691     } dw79;
2692
2693     /* dw80 */
2694     struct {
2695         uint32_t mb_data_surf_index: 32;
2696     } dw80;
2697
2698     /* dw81 */
2699     struct {
2700         uint32_t mv_data_surf_index: 32;
2701     } dw81;
2702
2703     /* dw82 */
2704     struct {
2705         uint32_t i_dist_surf_index: 32;
2706     } dw82;
2707
2708     /* dw83 */
2709     struct {
2710         uint32_t src_y_surf_index: 32;
2711     } dw83;
2712
2713     /* dw84 */
2714     struct {
2715         uint32_t mb_specific_data_surf_index: 32;
2716     } dw84;
2717
2718     /* dw85 */
2719     struct {
2720         uint32_t aux_vme_out_surf_index: 32;
2721     } dw85;
2722
2723     /* dw86 */
2724     struct {
2725         uint32_t curr_ref_pic_sel_surf_index: 32;
2726     } dw86;
2727
2728     /* dw87 */
2729     struct {
2730         uint32_t hme_mv_pred_fwd_bwd_surf_index: 32;
2731     } dw87;
2732
2733     /* dw88 */
2734     struct {
2735         uint32_t hme_dist_surf_index: 32;
2736     } dw88;
2737
2738     /* dw89 */
2739     struct {
2740         uint32_t slice_map_surf_index: 32;
2741     } dw89;
2742
2743     /* dw90 */
2744     struct {
2745         uint32_t fwd_frm_mb_data_surf_index: 32;
2746     } dw90;
2747
2748     /* dw91 */
2749     struct {
2750         uint32_t fwd_frm_mv_surf_index: 32;
2751     } dw91;
2752
2753     /* dw92 */
2754     struct {
2755         uint32_t mb_qp_buffer: 32;
2756     } dw92;
2757
2758     /* dw93 */
2759     struct {
2760         uint32_t mb_brc_lut: 32;
2761     } dw93;
2762
2763     /* dw94 */
2764     struct {
2765         uint32_t vme_inter_prediction_surf_index: 32;
2766     } dw94;
2767
2768     /* dw95 */
2769     struct {
2770         uint32_t vme_inter_prediction_mr_surf_index: 32;
2771     } dw95;
2772
2773     /* dw96 */
2774     struct {
2775         uint32_t mb_stats_surf_index: 32;
2776     } dw96;
2777
2778     /* dw97 */
2779     struct {
2780         uint32_t mad_surf_index: 32;
2781     } dw97;
2782
2783     /* dw98 */
2784     struct {
2785         uint32_t force_non_skip_mb_map_surface: 32;
2786     } dw98;
2787
2788     /* dw99 */
2789     struct {
2790         uint32_t widi_wa_surf_index: 32;
2791     } dw99;
2792
2793     /* dw100 */
2794     struct {
2795         uint32_t brc_curbe_surf_index: 32;
2796     } dw100;
2797
2798     /* dw101 */
2799     struct {
2800         uint32_t static_detection_cost_table_index: 32;
2801     } dw101;
2802
2803     /* dw102 */
2804     struct {
2805         uint32_t fei_mv_predictor_surf_index: 32;
2806     } dw102;
2807
2808     /* dw103 */
2809     struct {
2810         uint32_t reserved: 32;
2811     } dw103;
2812
2813 } gen9_avc_fei_mbenc_curbe_data;
2814
2815 #define GEN9_AVC_FEI_KERNEL_I             0
2816 #define GEN9_AVC_FEI_KERNEL_P             1
2817 #define GEN9_AVC_FEI_KERNEL_B             2
2818 /* Number of MBENC kernels */
2819 #define NUM_GEN9_AVC_FEI_KERNEL_MBENC     3
2820
2821 struct gen_avc_mbenc_context {
2822     struct i965_gpe_context gpe_contexts[NUM_GEN9_AVC_KERNEL_MBENC];
2823 };
2824
2825 /*
2826 static frame detection structure and define
2827 */
2828 typedef enum _gen9_avc_binding_table_offset_sfd {
2829     GEN9_AVC_SFD_VDENC_INPUT_IMAGE_STATE_INDEX                 =  0,
2830     GEN9_AVC_SFD_MV_DATA_SURFACE_INDEX                         =  1,
2831     GEN9_AVC_SFD_INTER_DISTORTION_SURFACE_INDEX                =  2,
2832     GEN9_AVC_SFD_OUTPUT_DATA_SURFACE_INDEX                     =  3,
2833     GEN9_AVC_SFD_VDENC_OUTPUT_IMAGE_STATE_INDEX                =  4,
2834     GEN9_AVC_SFD_NUM_SURFACES                                  =  5
2835 } gen9_avc_binding_table_offset_sfd;
2836
2837 typedef struct _gen9_avc_sfd_curbe_data {
2838     struct {
2839         uint32_t vdenc_mode_disable: 1;
2840         uint32_t brc_mode_enable: 1;
2841         uint32_t slice_type: 2;
2842         uint32_t reserved0: 1;
2843         uint32_t stream_in_type: 4;
2844         uint32_t enable_adaptive_mv_stream_in: 1;
2845         uint32_t reserved1: 1;
2846         uint32_t enable_intra_cost_scaling_for_static_frame: 1;
2847         uint32_t reserved2: 20;
2848     } dw0;
2849
2850     struct {
2851         uint32_t qp_value: 8;
2852         uint32_t num_of_refs: 8;
2853         uint32_t hme_stream_in_ref_cost: 8;
2854         uint32_t reserved0: 8;
2855     } dw1;
2856
2857     struct {
2858         uint32_t frame_width_in_mbs: 16;
2859         uint32_t frame_height_in_mbs: 16;
2860     } dw2;
2861
2862     struct {
2863         uint32_t large_mv_threshold;
2864     } dw3;
2865
2866     struct {
2867         uint32_t total_large_mv_threshold;
2868     } dw4;
2869
2870     struct {
2871         uint32_t zmv_threshold;
2872     } dw5;
2873
2874     struct {
2875         uint32_t total_zmv_threshold;
2876     } dw6;
2877
2878     struct {
2879         uint32_t min_dist_threshold;
2880     } dw7;
2881
2882     char cost_table[52];
2883     struct {
2884         uint32_t actual_width_in_mb: 16;
2885         uint32_t actual_height_in_mb: 16;
2886     } dw21;
2887
2888     struct {
2889         uint32_t reserved;
2890     } dw22;
2891
2892     struct {
2893         uint32_t reserved;
2894     } dw23;
2895
2896     struct {
2897         uint32_t vdenc_input_image_state_index;
2898     } dw24;
2899
2900     struct {
2901         uint32_t reserved;
2902     } dw25;
2903
2904     struct {
2905         uint32_t mv_data_surface_index;
2906     } dw26;
2907
2908     struct {
2909         uint32_t inter_distortion_surface_index;
2910     } dw27;
2911
2912     struct {
2913         uint32_t output_data_surface_index;
2914     } dw28;
2915
2916     struct {
2917         uint32_t vdenc_output_image_state_index;
2918     } dw29;
2919
2920 } gen9_avc_sfd_curbe_data;
2921
2922 struct gen_avc_sfd_context {
2923     struct i965_gpe_context gpe_contexts;
2924 };
2925
2926 /* Gen95 */
2927
2928 typedef struct _gen95_avc_scaling4x_curbe_data {
2929     struct {
2930         uint32_t   input_picture_width  : 16;
2931         uint32_t   input_picture_height : 16;
2932     } dw0;
2933
2934     struct {
2935         uint32_t   input_y_bti_frame;
2936     } dw1;
2937
2938     struct {
2939         uint32_t   output_y_bti_frame;
2940     } dw2;
2941
2942     struct {
2943         uint32_t reserved;
2944     } dw3;
2945
2946     struct {
2947         uint32_t reserved;
2948     } dw4;
2949
2950     struct {
2951         uint32_t flatness_threshold;
2952     } dw5;
2953
2954     struct {
2955         uint32_t enable_mb_flatness_check: 1;
2956         uint32_t enable_mb_variance_output: 1;
2957         uint32_t enable_mb_pixel_average_output: 1;
2958         uint32_t enable_block8x8_statistics_output: 1;
2959         uint32_t reserved0: 28;
2960     } dw6;
2961
2962     struct {
2963         uint32_t reserved;
2964     } dw7;
2965
2966     struct {
2967         uint32_t mbv_proc_stat_bti_frame;
2968     } dw8;
2969
2970     struct {
2971         uint32_t reserved;
2972     } dw9;
2973
2974     struct {
2975         uint32_t reserved;
2976     } dw10;
2977
2978     struct {
2979         uint32_t reserved;
2980     } dw11;
2981
2982     struct {
2983         uint32_t reserved;
2984     } dw12;
2985
2986     struct {
2987         uint32_t reserved;
2988     } dw13;
2989
2990     struct {
2991         uint32_t reserved;
2992     } dw14;
2993
2994     struct {
2995         uint32_t reserved;
2996     } dw15;
2997 } gen95_avc_scaling4x_curbe_data;
2998
2999 typedef enum _gen95_avc_binding_table_offset_frame_brc_update {
3000     GEN95_AVC_FRAME_BRC_UPDATE_HISTORY_INDEX                = 0,
3001     GEN95_AVC_FRAME_BRC_UPDATE_PAK_STATISTICS_OUTPUT_INDEX  = 1,
3002     GEN95_AVC_FRAME_BRC_UPDATE_IMAGE_STATE_READ_INDEX       = 2,
3003     GEN95_AVC_FRAME_BRC_UPDATE_IMAGE_STATE_WRITE_INDEX      = 3,
3004     GEN95_AVC_FRAME_BRC_UPDATE_MBENC_CURBE_WRITE_INDEX      = 4,
3005     GEN95_AVC_FRAME_BRC_UPDATE_DISTORTION_INDEX             = 5,
3006     GEN95_AVC_FRAME_BRC_UPDATE_CONSTANT_DATA_INDEX          = 6,
3007     GEN95_AVC_FRAME_BRC_UPDATE_MB_STATUS_INDEX              = 7,
3008     GEN95_AVC_FRAME_BRC_UPDATE_NUM_SURFACES_INDEX           = 8
3009 } gen95_avc_binding_table_offset_frame_brc_update;
3010
3011 typedef enum _gen95_avc_binding_table_offset_mbenc {
3012     GEN95_AVC_MBENC_BRC_CURBE_DATA_INDEX                     = 39,
3013     GEN95_AVC_MBENC_FORCE_NONSKIP_MB_MAP_INDEX               = 40,
3014     GEN95_AVC_MBENC_WIDI_WA_INDEX                            = 41,
3015     GEN95_AVC_MBENC_SFD_COST_TABLE_INDEX                     = 42,
3016     GEN95_AVC_MBENC_NUM_SURFACES_INDEX                       = 43
3017 } gen95_avc_binding_table_offset_mbenc;
3018
3019 typedef struct _gen95_avc_mbenc_curbe_data {
3020     struct {
3021         uint32_t skip_mode_enable: 1;
3022         uint32_t adaptive_enable: 1;
3023         uint32_t bi_mix_dis: 1;
3024         uint32_t reserved0: 2;
3025         uint32_t early_ime_success_enable: 1;
3026         uint32_t reserved1: 1;
3027         uint32_t t8x8_flag_for_inter_enable: 1;
3028         uint32_t reserved2: 16;
3029         uint32_t early_ime_stop: 8;
3030     } dw0;
3031
3032     struct {
3033         uint32_t max_num_mvs: 6;
3034         uint32_t extended_mv_cost_range: 1;
3035         uint32_t reserved0: 9;
3036         uint32_t bi_weight: 6;
3037         uint32_t reserved1: 6;
3038         uint32_t uni_mix_disable: 1;
3039         uint32_t reserved2: 3;
3040     } dw1;
3041
3042     struct {
3043         uint32_t max_len_sp: 8;
3044         uint32_t max_num_su: 8;
3045         uint32_t pitch_width: 16;
3046     } dw2;
3047
3048     struct {
3049         uint32_t src_size: 2;
3050         uint32_t reserved0: 2;
3051         uint32_t mb_type_remap: 2;
3052         uint32_t src_access: 1;
3053         uint32_t ref_access: 1;
3054         uint32_t search_ctrl: 3;
3055         uint32_t dual_search_path_option: 1;
3056         uint32_t sub_pel_mode: 2;
3057         uint32_t skip_type: 1;
3058         uint32_t disable_field_cache_allocation: 1;
3059         uint32_t inter_chroma_mode: 1;
3060         uint32_t ftq_enable: 1;
3061         uint32_t bme_disable_fbr: 1;
3062         uint32_t block_based_skip_enable: 1;
3063         uint32_t inter_sad: 2;
3064         uint32_t intra_sad: 2;
3065         uint32_t sub_mb_part_mask: 7;
3066         uint32_t reserved1: 1;
3067     } dw3;
3068
3069     struct {
3070         uint32_t picture_height_minus1: 16;
3071         uint32_t mv_restriction_in_slice_enable: 1;
3072         uint32_t delta_mv_enable: 1;
3073         uint32_t true_distortion_enable: 1;
3074         uint32_t enable_wavefront_optimization: 1;
3075         uint32_t enable_fbr_bypass: 1;
3076         uint32_t enable_intra_cost_scaling_for_static_frame: 1;
3077         uint32_t enable_intra_refresh: 1;
3078         uint32_t enable_widi_wa_surf: 1;
3079         uint32_t enable_widi_dirty_rect: 1;
3080         uint32_t enable_cur_fld_idr: 1;
3081         uint32_t contrained_intra_pred_flag: 1;
3082         uint32_t field_parity_flag: 1;
3083         uint32_t hme_enable: 1;
3084         uint32_t picture_type: 2;
3085         uint32_t use_actual_ref_qp_value: 1;
3086     } dw4;
3087
3088     struct {
3089         uint32_t slice_mb_height: 16;
3090         uint32_t ref_width: 8;
3091         uint32_t ref_height: 8;
3092     } dw5;
3093
3094     struct {
3095         uint32_t batch_buffer_end;
3096     } dw6;
3097
3098     struct {
3099         uint32_t intra_part_mask: 5;
3100         uint32_t non_skip_zmv_added: 1;
3101         uint32_t non_skip_mode_added: 1;
3102         uint32_t luma_intra_src_corner_swap: 1;
3103         uint32_t reserved0: 8;
3104         uint32_t mv_cost_scale_factor: 2;
3105         uint32_t bilinear_enable: 1;
3106         uint32_t src_field_polarity: 1;
3107         uint32_t weightedsad_harr: 1;
3108         uint32_t ac_only_haar: 1;
3109         uint32_t ref_id_cost_mode: 1;
3110         uint32_t reserved1: 1;
3111         uint32_t skip_center_mask: 8;
3112     } dw7;
3113
3114     struct {
3115         uint32_t mode_0_cost: 8;
3116         uint32_t mode_1_cost: 8;
3117         uint32_t mode_2_cost: 8;
3118         uint32_t mode_3_cost: 8;
3119     } dw8;
3120
3121     struct {
3122         uint32_t mode_4_cost: 8;
3123         uint32_t mode_5_cost: 8;
3124         uint32_t mode_6_cost: 8;
3125         uint32_t mode_7_cost: 8;
3126     } dw9;
3127
3128     struct {
3129         uint32_t mode_8_cost: 8;
3130         uint32_t mode_9_cost: 8;
3131         uint32_t ref_id_cost: 8;
3132         uint32_t chroma_intra_mode_cost: 8;
3133     } dw10;
3134
3135     union {
3136         struct {
3137             uint32_t mv_0_cost: 8;
3138             uint32_t mv_1_cost: 8;
3139             uint32_t mv_2_cost: 8;
3140             uint32_t mv_3_cost: 8;
3141         };
3142         uint32_t value;
3143     } dw11;
3144
3145     struct {
3146         uint32_t mv_4_cost: 8;
3147         uint32_t mv_5_cost: 8;
3148         uint32_t mv_6_cost: 8;
3149         uint32_t mv_7_cost: 8;
3150     } dw12;
3151
3152     struct {
3153         uint32_t qp_prime_y: 8;
3154         uint32_t qp_prime_cb: 8;
3155         uint32_t qp_prime_cr: 8;
3156         uint32_t target_size_in_word: 8;
3157     } dw13;
3158
3159     struct {
3160         uint32_t sic_fwd_transcoeff_threshold_0: 16;
3161         uint32_t sic_fwd_transcoeff_threshold_1: 8;
3162         uint32_t sic_fwd_transcoeff_threshold_2: 8;
3163     } dw14;
3164
3165     struct {
3166         uint32_t sic_fwd_transcoeff_threshold_3: 8;
3167         uint32_t sic_fwd_transcoeff_threshold_4: 8;
3168         uint32_t sic_fwd_transcoeff_threshold_5: 8;
3169         uint32_t sic_fwd_transcoeff_threshold_6: 8;
3170     } dw15;
3171
3172     struct {
3173         struct generic_search_path_delta sp_delta_0;
3174         struct generic_search_path_delta sp_delta_1;
3175         struct generic_search_path_delta sp_delta_2;
3176         struct generic_search_path_delta sp_delta_3;
3177     } dw16;
3178
3179     struct {
3180         struct generic_search_path_delta sp_delta_4;
3181         struct generic_search_path_delta sp_delta_5;
3182         struct generic_search_path_delta sp_delta_6;
3183         struct generic_search_path_delta sp_delta_7;
3184     } dw17;
3185
3186     struct {
3187         struct generic_search_path_delta sp_delta_8;
3188         struct generic_search_path_delta sp_delta_9;
3189         struct generic_search_path_delta sp_delta_10;
3190         struct generic_search_path_delta sp_delta_11;
3191     } dw18;
3192
3193     struct {
3194         struct generic_search_path_delta sp_delta_12;
3195         struct generic_search_path_delta sp_delta_13;
3196         struct generic_search_path_delta sp_delta_14;
3197         struct generic_search_path_delta sp_delta_15;
3198     } dw19;
3199
3200     struct {
3201         struct generic_search_path_delta sp_delta_16;
3202         struct generic_search_path_delta sp_delta_17;
3203         struct generic_search_path_delta sp_delta_18;
3204         struct generic_search_path_delta sp_delta_19;
3205     } dw20;
3206
3207     struct {
3208         struct generic_search_path_delta sp_delta_20;
3209         struct generic_search_path_delta sp_delta_21;
3210         struct generic_search_path_delta sp_delta_22;
3211         struct generic_search_path_delta sp_delta_23;
3212     } dw21;
3213
3214     struct {
3215         struct generic_search_path_delta sp_delta_24;
3216         struct generic_search_path_delta sp_delta_25;
3217         struct generic_search_path_delta sp_delta_26;
3218         struct generic_search_path_delta sp_delta_27;
3219     } dw22;
3220
3221     struct {
3222         struct generic_search_path_delta sp_delta_28;
3223         struct generic_search_path_delta sp_delta_29;
3224         struct generic_search_path_delta sp_delta_30;
3225         struct generic_search_path_delta sp_delta_31;
3226     } dw23;
3227
3228     struct {
3229         struct generic_search_path_delta sp_delta_32;
3230         struct generic_search_path_delta sp_delta_33;
3231         struct generic_search_path_delta sp_delta_34;
3232         struct generic_search_path_delta sp_delta_35;
3233     } dw24;
3234
3235     struct {
3236         struct generic_search_path_delta sp_delta_36;
3237         struct generic_search_path_delta sp_delta_37;
3238         struct generic_search_path_delta sp_delta_38;
3239         struct generic_search_path_delta sp_delta_39;
3240     } dw25;
3241
3242     struct {
3243         struct generic_search_path_delta sp_delta_40;
3244         struct generic_search_path_delta sp_delta_41;
3245         struct generic_search_path_delta sp_delta_42;
3246         struct generic_search_path_delta sp_delta_43;
3247     } dw26;
3248
3249     struct {
3250         struct generic_search_path_delta sp_delta_44;
3251         struct generic_search_path_delta sp_delta_45;
3252         struct generic_search_path_delta sp_delta_46;
3253         struct generic_search_path_delta sp_delta_47;
3254     } dw27;
3255
3256     struct {
3257         struct generic_search_path_delta sp_delta_48;
3258         struct generic_search_path_delta sp_delta_49;
3259         struct generic_search_path_delta sp_delta_50;
3260         struct generic_search_path_delta sp_delta_51;
3261     } dw28;
3262
3263     struct {
3264         struct generic_search_path_delta sp_delta_52;
3265         struct generic_search_path_delta sp_delta_53;
3266         struct generic_search_path_delta sp_delta_54;
3267         struct generic_search_path_delta sp_delta_55;
3268     } dw29;
3269
3270     struct {
3271         uint32_t intra_4x4_mode_mask: 9;
3272         uint32_t reserved0: 7;
3273         uint32_t intra_8x8_mode_mask: 9;
3274         uint32_t reserved1: 7;
3275     } dw30;
3276
3277     struct {
3278         uint32_t intra_16x16_mode_mask: 4;
3279         uint32_t intra_chroma_mode_mask: 4;
3280         uint32_t intra_compute_type: 2;
3281         uint32_t reserved0: 22;
3282     } dw31;
3283
3284     struct {
3285         uint32_t skip_val: 16;
3286         uint32_t mult_pred_l0_disable: 8;
3287         uint32_t mult_pred_l1_disable: 8;
3288     } dw32;
3289
3290     struct {
3291         uint32_t intra_16x16_nondc_penalty: 8;
3292         uint32_t intra_8x8_nondc_penalty: 8;
3293         uint32_t intra_4x4_nondc_penalty: 8;
3294         uint32_t reserved0: 8;
3295     } dw33;
3296
3297     struct {
3298         uint32_t list0_ref_id0_field_parity: 1;
3299         uint32_t list0_ref_id1_field_parity: 1;
3300         uint32_t list0_ref_id2_field_parity: 1;
3301         uint32_t list0_ref_id3_field_parity: 1;
3302         uint32_t list0_ref_id4_field_parity: 1;
3303         uint32_t list0_ref_id5_field_parity: 1;
3304         uint32_t list0_ref_id6_field_parity: 1;
3305         uint32_t list0_ref_id7_field_parity: 1;
3306         uint32_t list1_ref_id0_frm_field_parity: 1;
3307         uint32_t list1_ref_id1_frm_field_parity: 1;
3308         uint32_t widi_intra_refresh_en: 2;
3309         uint32_t arbitray_num_mbs_per_slice: 1;
3310         uint32_t tq_enable: 1;
3311         uint32_t force_non_skip_check: 1;
3312         uint32_t disable_enc_skip_check: 1;
3313         uint32_t enable_direct_bias_adjustment: 1;
3314         uint32_t b_force_to_skip: 1;
3315         uint32_t enable_global_motion_bias_adjustment: 1;
3316         uint32_t enable_adaptive_tx_decision: 1;
3317         uint32_t enable_per_mb_static_check: 1;
3318         uint32_t enable_adaptive_search_window_size: 1;
3319         uint32_t reserved0: 1;
3320         uint32_t cqp_flag: 1;
3321         uint32_t list1_ref_id0_field_parity: 1;
3322         uint32_t list1_ref_id1_field_parity: 1;
3323         uint32_t mad_enable_falg: 1;
3324         uint32_t roi_enable_flag: 1;
3325         uint32_t enable_mb_flatness_check_optimization: 1;
3326         uint32_t b_direct_mode: 1;
3327         uint32_t mb_brc_enable: 1;
3328         uint32_t b_original_bff: 1;
3329     } dw34;
3330
3331     struct {
3332         uint32_t panic_mode_mb_threshold: 16;
3333         uint32_t small_mb_size_in_word: 8;
3334         uint32_t large_mb_size_in_word: 8;
3335     } dw35;
3336
3337     struct {
3338         uint32_t num_ref_idx_l0_minus_one: 8;
3339         uint32_t hme_combined_extra_sus: 8;
3340         uint32_t num_ref_idx_l1_minus_one: 8;
3341         uint32_t reserved0: 4;
3342         uint32_t is_fwd_frame_short_term_ref: 1;
3343         uint32_t check_all_fractional_enable: 1;
3344         uint32_t hme_combine_overlap: 2;
3345     } dw36;
3346
3347     struct {
3348         uint32_t skip_mode_enable: 1;
3349         uint32_t adaptive_enable: 1;
3350         uint32_t bi_mix_dis: 1;
3351         uint32_t reserved0: 2;
3352         uint32_t early_ime_success_enable: 1;
3353         uint32_t reserved1: 1;
3354         uint32_t t8x8_flag_for_inter_enable: 1;
3355         uint32_t reserved2: 16;
3356         uint32_t early_ime_stop: 8;
3357     } dw37;
3358
3359     /* reserved */
3360     struct {
3361         uint32_t max_len_sp: 8;
3362         uint32_t max_num_su: 8;
3363         uint32_t ref_threshold: 16;
3364     } dw38;
3365
3366     struct {
3367         uint32_t reserved0: 8;
3368         uint32_t hme_ref_windows_comb_threshold: 8;
3369         uint32_t ref_width: 8;
3370         uint32_t ref_height: 8;
3371     } dw39;
3372
3373     struct {
3374         uint32_t dist_scale_factor_ref_id0_list0: 16;
3375         uint32_t dist_scale_factor_ref_id1_list0: 16;
3376     } dw40;
3377
3378     struct {
3379         uint32_t dist_scale_factor_ref_id2_list0: 16;
3380         uint32_t dist_scale_factor_ref_id3_list0: 16;
3381     } dw41;
3382
3383     struct {
3384         uint32_t dist_scale_factor_ref_id4_list0: 16;
3385         uint32_t dist_scale_factor_ref_id5_list0: 16;
3386     } dw42;
3387
3388     struct {
3389         uint32_t dist_scale_factor_ref_id6_list0: 16;
3390         uint32_t dist_scale_factor_ref_id7_list0: 16;
3391     } dw43;
3392
3393     struct {
3394         uint32_t actual_qp_value_for_ref_id0_list0: 8;
3395         uint32_t actual_qp_value_for_ref_id1_list0: 8;
3396         uint32_t actual_qp_value_for_ref_id2_list0: 8;
3397         uint32_t actual_qp_value_for_ref_id3_list0: 8;
3398     } dw44;
3399
3400     struct {
3401         uint32_t actual_qp_value_for_ref_id4_list0: 8;
3402         uint32_t actual_qp_value_for_ref_id5_list0: 8;
3403         uint32_t actual_qp_value_for_ref_id6_list0: 8;
3404         uint32_t actual_qp_value_for_ref_id7_list0: 8;
3405     } dw45;
3406
3407     struct {
3408         uint32_t actual_qp_value_for_ref_id0_list1: 8;
3409         uint32_t actual_qp_value_for_ref_id1_list1: 8;
3410         uint32_t ref_cost: 16;
3411     } dw46;
3412
3413     struct {
3414         uint32_t mb_qp_read_factor: 8;
3415         uint32_t intra_cost_sf: 8;
3416         uint32_t max_vmv_r: 16;
3417     } dw47;
3418
3419     struct {
3420         uint32_t widi_intra_refresh_mb_x: 16;
3421         uint32_t widi_intra_refresh_unit_in_mb_minus1: 8;
3422         uint32_t widi_intra_refresh_qp_delta: 8;
3423     } dw48;
3424
3425     struct {
3426         uint32_t roi_1_x_left: 16;
3427         uint32_t roi_1_y_top: 16;
3428     } dw49;
3429
3430     struct {
3431         uint32_t roi_1_x_right: 16;
3432         uint32_t roi_1_y_bottom: 16;
3433     } dw50;
3434
3435     struct {
3436         uint32_t roi_2_x_left: 16;
3437         uint32_t roi_2_y_top: 16;
3438     } dw51;
3439
3440     struct {
3441         uint32_t roi_2_x_right: 16;
3442         uint32_t roi_2_y_bottom: 16;
3443     } dw52;
3444
3445     struct {
3446         uint32_t roi_3_x_left: 16;
3447         uint32_t roi_3_y_top: 16;
3448     } dw53;
3449
3450     struct {
3451         uint32_t roi_3_x_right: 16;
3452         uint32_t roi_3_y_bottom: 16;
3453     } dw54;
3454
3455     struct {
3456         uint32_t roi_4_x_left: 16;
3457         uint32_t roi_4_y_top: 16;
3458     } dw55;
3459
3460     struct {
3461         uint32_t roi_4_x_right: 16;
3462         uint32_t roi_4_y_bottom: 16;
3463     } dw56;
3464
3465     struct {
3466         uint32_t roi_1_dqp_prime_y: 8;
3467         uint32_t roi_2_dqp_prime_y: 8;
3468         uint32_t roi_3_dqp_prime_y: 8;
3469         uint32_t roi_4_dqp_prime_y: 8;
3470     } dw57;
3471
3472     union {
3473         struct {
3474             uint32_t lambda_8x8_inter: 16;
3475             uint32_t lambda_8x8_intra: 16;
3476         };
3477         uint32_t value;
3478     } dw58;
3479
3480     union {
3481         struct {
3482             uint32_t lambda_inter: 16;
3483             uint32_t lambda_intra: 16;
3484         };
3485         uint32_t value;
3486     } dw59;
3487
3488     struct {
3489         uint32_t mb_texture_threshold: 16;
3490         uint32_t tx_decision_threshold: 16;
3491     } dw60;
3492
3493     struct {
3494         uint32_t hme_mv_cost_scaling_factor: 8;
3495         uint32_t reserved0: 8;
3496         uint32_t widi_intra_refresh_mb_y: 16;
3497     } dw61;
3498
3499     struct {
3500         uint32_t reserved;
3501     } dw62;
3502
3503     struct {
3504         uint32_t reserved;
3505     } dw63;
3506
3507     struct {
3508         uint32_t reserved;
3509     } dw64;
3510
3511     struct {
3512         uint32_t reserved;
3513     } dw65;
3514
3515     struct {
3516         uint32_t mb_data_surf_index;
3517     } dw66;
3518
3519     struct {
3520         uint32_t mv_data_surf_index;
3521     } dw67;
3522
3523     struct {
3524         uint32_t i_dist_surf_index;
3525     } dw68;
3526
3527     struct {
3528         uint32_t src_y_surf_index;
3529     } dw69;
3530
3531     struct {
3532         uint32_t mb_specific_data_surf_index;
3533     } dw70;
3534
3535     struct {
3536         uint32_t aux_vme_out_surf_index;
3537     } dw71;
3538
3539     struct {
3540         uint32_t curr_ref_pic_sel_surf_index;
3541     } dw72;
3542
3543     struct {
3544         uint32_t hme_mv_pred_fwd_bwd_surf_index;
3545     } dw73;
3546
3547     struct {
3548         uint32_t hme_dist_surf_index;
3549     } dw74;
3550
3551     struct {
3552         uint32_t slice_map_surf_index;
3553     } dw75;
3554
3555     struct {
3556         uint32_t fwd_frm_mb_data_surf_index;
3557     } dw76;
3558
3559     struct {
3560         uint32_t fwd_frm_mv_surf_index;
3561     } dw77;
3562
3563     struct {
3564         uint32_t mb_qp_buffer;
3565     } dw78;
3566
3567     struct {
3568         uint32_t mb_brc_lut;
3569     } dw79;
3570
3571     struct {
3572         uint32_t vme_inter_prediction_surf_index;
3573     } dw80;
3574
3575     struct {
3576         uint32_t vme_inter_prediction_mr_surf_index;
3577     } dw81;
3578
3579     struct {
3580         uint32_t mb_stats_surf_index;
3581     } dw82;
3582
3583     struct {
3584         uint32_t mad_surf_index;
3585     } dw83;
3586
3587     struct {
3588         uint32_t brc_curbe_surf_index;
3589     } dw84;
3590
3591     struct {
3592         uint32_t force_non_skip_mb_map_surface;
3593     } dw85;
3594
3595     struct {
3596         uint32_t widi_wa_surf_index;
3597     } dw86;
3598
3599     struct {
3600         uint32_t static_detection_cost_table_index;
3601     } dw87;
3602
3603 } gen95_avc_mbenc_curbe_data;
3604
3605 typedef struct _gen8_avc_encoder_kernel_header {
3606     int nKernelCount;
3607
3608     // Quality mode for Frame/Field
3609     kernel_header mbenc_quality_I;
3610     kernel_header mbenc_quality_P;
3611     kernel_header mbenc_quality_B;
3612     // Normal mode for Frame/Field
3613     kernel_header mbenc_normal_I;
3614     kernel_header mbenc_normal_P;
3615     kernel_header mbenc_normal_B;
3616     // Performance modes for Frame/Field
3617     kernel_header mbenc_performance_I;
3618     kernel_header mbenc_performance_P;
3619     kernel_header mbenc_performance_B;
3620     // WiDi modes for Frame/Field
3621     kernel_header mbenc_widi_I;
3622     kernel_header mbenc_widi_P;
3623     kernel_header mbenc_widi_B;
3624
3625     // HME
3626     kernel_header me_p;
3627     kernel_header me_b;
3628
3629     // DownScaling
3630     kernel_header ply_dscale_ply;
3631     kernel_header ply_dscale_2f_ply_2f;
3632     // BRC Init frame
3633     kernel_header frame_brc_init;
3634
3635     // FrameBRC Update
3636     kernel_header frame_brc_update;
3637
3638     // BRC Reset frame
3639     kernel_header frame_brc_reset;
3640
3641     // BRC I Frame Distortion
3642     kernel_header frame_brc_i_dist;
3643
3644     //BRC Block Copy
3645     kernel_header brc_block_copy;
3646
3647     // 2x DownScaling
3648     kernel_header ply_2xdscale_ply;
3649     kernel_header ply_2xdscale_2f_ply_2f;
3650
3651     // Static frame detection Kernel
3652     kernel_header static_detection;
3653 } gen8_avc_encoder_kernel_header;
3654
3655 struct gen8_mfx_avc_img_state {
3656     union {
3657         struct {
3658             uint32_t dword_length: 16;
3659             uint32_t command_sub_opcode_b: 5;
3660             uint32_t command_sub_opcode_a: 3;
3661             uint32_t command_opcode: 3;
3662             uint32_t command_pipeline: 2;
3663             uint32_t command_type: 3;
3664         };
3665
3666         uint32_t value;
3667     } dw0;
3668
3669     struct {
3670         uint32_t frame_size_in_mbs: 16; //minus1
3671         uint32_t pad0: 16;
3672     } dw1;
3673
3674     struct {
3675         uint32_t frame_width_in_mbs_minus1: 8; //minus1
3676         uint32_t pad0: 8;
3677         uint32_t frame_height_in_mbs_minus1: 8; //minus1
3678         uint32_t pad1: 8;
3679     } dw2;
3680
3681     struct {
3682         uint32_t pad0: 8;
3683         uint32_t image_structure: 2;
3684         uint32_t weighted_bipred_idc: 2;
3685         uint32_t weighted_pred_flag: 1;
3686         uint32_t inter_mb_conf_flag: 1;
3687         uint32_t intra_mb_conf_flag: 1;
3688         uint32_t pad1: 1;
3689         uint32_t chroma_qp_offset: 5;
3690         uint32_t pad3: 3;
3691         uint32_t second_chroma_qp_offset: 5;
3692         uint32_t pad4: 3;
3693     } dw3;
3694
3695     struct {
3696         uint32_t field_picture_flag: 1;
3697         uint32_t mbaff_mode_active: 1;
3698         uint32_t frame_mb_only_flag: 1;
3699         uint32_t transform_8x8_idct_mode_flag: 1;
3700         uint32_t direct_8x8_interface_flag: 1;
3701         uint32_t constrained_intra_prediction_flag: 1;
3702         uint32_t current_img_dispoable_flag: 1;
3703         uint32_t entropy_coding_flag: 1;
3704         uint32_t mb_mv_format_flag: 1;
3705         uint32_t pad0: 1;
3706         uint32_t chroma_format_idc: 2;
3707         uint32_t mv_unpacked_flag: 1;
3708         uint32_t insert_test_flag: 1;
3709         uint32_t load_slice_pointer_flag: 1;
3710         uint32_t macroblock_stat_enable: 1;
3711         uint32_t minimum_frame_size: 16;
3712     } dw4;
3713
3714     struct {
3715         uint32_t intra_mb_max_bit_flag: 1;
3716         uint32_t inter_mb_max_bit_flag: 1;
3717         uint32_t frame_size_over_flag: 1;
3718         uint32_t frame_size_under_flag: 1;
3719         uint32_t pad0: 3;
3720         uint32_t intra_mb_ipcm_flag: 1;
3721         uint32_t pad1: 1;
3722         uint32_t mb_rate_ctrl_flag: 1;
3723         uint32_t min_frame_size_units: 2;
3724         uint32_t inter_mb_zero_cbp_flag: 1; //?change
3725         uint32_t pad2: 3;
3726         uint32_t non_first_pass_flag: 1;
3727         uint32_t pad3: 10;
3728         uint32_t aq_chroma_disable: 1;
3729         uint32_t aq_rounding: 3;
3730         uint32_t aq_enable: 1;
3731     } dw5;
3732
3733     struct {
3734         uint32_t intra_mb_max_size: 12;
3735         uint32_t pad0: 4;
3736         uint32_t inter_mb_max_size: 12;
3737         uint32_t pad1: 4;
3738     } dw6;
3739
3740     struct {
3741         uint32_t pad0: 32;
3742     } dw7;
3743
3744     struct {
3745         uint32_t slice_delta_qp_max0: 8;
3746         uint32_t slice_delta_qp_max1: 8;
3747         uint32_t slice_delta_qp_max2: 8;
3748         uint32_t slice_delta_qp_max3: 8;
3749     } dw8;
3750
3751     struct {
3752         uint32_t slice_delta_qp_min0: 8;
3753         uint32_t slice_delta_qp_min1: 8;
3754         uint32_t slice_delta_qp_min2: 8;
3755         uint32_t slice_delta_qp_min3: 8;
3756     } dw9;
3757
3758     struct {
3759         uint32_t frame_bitrate_min: 14;
3760         uint32_t frame_bitrate_min_unit_mode: 1;
3761         uint32_t frame_bitrate_min_unit: 1;
3762         uint32_t frame_bitrate_max: 14;
3763         uint32_t frame_bitrate_max_unit_mode: 1;
3764         uint32_t frame_bitrate_max_unit: 1;
3765     } dw10;
3766
3767     struct {
3768         uint32_t frame_bitrate_min_delta: 15;
3769         uint32_t pad0: 1;
3770         uint32_t frame_bitrate_max_delta: 15;
3771         uint32_t pad1: 1;
3772     } dw11;
3773
3774     struct {
3775         uint32_t pad0: 32;
3776     } dw12;
3777
3778     struct {
3779         uint32_t pic_qp_init_minus26: 8;
3780         uint32_t pic_num_ref_idx_l0_active_minus1: 6;
3781         uint32_t pad0: 2;
3782         uint32_t pic_num_ref_idx_l1_active_minus1: 6;
3783         uint32_t pad1: 2;
3784         uint32_t num_ref_frames: 5;
3785         uint32_t is_curr_pic_has_mmco5: 1;
3786         uint32_t pad2: 2;
3787     } dw13;
3788
3789     struct {
3790         uint32_t pic_order_present_flag: 1;
3791         uint32_t delta_pic_order_always_zero_flag: 1;
3792         uint32_t pic_order_cnt_type: 2;
3793         uint32_t pad0: 4;
3794         uint32_t slice_group_map_type: 3;
3795         uint32_t redundant_pic_cnt_present_flag: 1;
3796         uint32_t num_slice_groups_minus1: 3;
3797         uint32_t deblock_filter_ctrl_present_flag: 1;
3798         uint32_t log2_max_frame_num_minus4: 8;
3799         uint32_t log2_max_pic_order_cnt_lsb_minus4: 8;
3800     } dw14;
3801
3802     struct {
3803         uint32_t slice_group_change_rate: 16;
3804         uint32_t curr_pic_frame_num: 16;
3805     } dw15;
3806
3807     struct {
3808         uint32_t current_frame_view_id: 10;
3809         uint32_t pad0: 2;
3810         uint32_t max_view_idx_l0: 4;
3811         uint32_t pad1: 2;
3812         uint32_t max_view_idx_l1: 4;
3813         uint32_t pad2: 9;
3814         uint32_t inter_view_order_disable: 1;
3815     } dw16;
3816 };
3817
3818
3819
3820 typedef struct _gen8_avc_mbenc_curbe_data {
3821     struct {
3822         uint32_t skip_mode_enable: 1;
3823         uint32_t adaptive_enable: 1;
3824         uint32_t bi_mix_dis: 1;
3825         uint32_t reserved0: 2;
3826         uint32_t early_ime_success_enable: 1;
3827         uint32_t reserved1: 1;
3828         uint32_t t8x8_flag_for_inter_enable: 1;
3829         uint32_t reserved2: 16;
3830         uint32_t early_ime_stop: 8;
3831     } dw0;
3832
3833     struct {
3834         uint32_t max_num_mvs: 6;
3835         uint32_t reserved0: 10;
3836         uint32_t bi_weight: 6;
3837         uint32_t reserved1: 6;
3838         uint32_t uni_mix_disable: 1;
3839         uint32_t reserved2: 3;
3840     } dw1;
3841
3842     struct {
3843         uint32_t max_len_sp: 8;
3844         uint32_t max_num_su: 8;
3845         uint32_t pitch_width: 16;
3846     } dw2;
3847
3848     struct {
3849         uint32_t src_size: 2;
3850         uint32_t reserved0: 2;
3851         uint32_t mb_type_remap: 2;
3852         uint32_t src_access: 1;
3853         uint32_t ref_access: 1;
3854         uint32_t search_ctrl: 3;
3855         uint32_t dual_search_path_option: 1;
3856         uint32_t sub_pel_mode: 2;
3857         uint32_t skip_type: 1;
3858         uint32_t disable_field_cache_allocation: 1;
3859         uint32_t inter_chroma_mode: 1;
3860         uint32_t ftq_enable: 1;
3861         uint32_t bme_disable_fbr: 1;
3862         uint32_t block_based_skip_enable: 1;
3863         uint32_t inter_sad: 2;
3864         uint32_t intra_sad: 2;
3865         uint32_t sub_mb_part_mask: 7;
3866         uint32_t reserved1: 1;
3867     } dw3;
3868
3869     struct {
3870         uint32_t picture_height_minus1: 16;
3871         uint32_t mv_restriction_in_slice_enable: 1;
3872         uint32_t delta_mv_enable: 1;
3873         uint32_t true_distortion_enable: 1;
3874         uint32_t enable_wavefront_optimization: 1;
3875         uint32_t reserved0: 1;
3876         uint32_t enable_intra_cost_scaling_for_static_frame: 1;
3877         uint32_t enable_intra_refresh: 1;
3878         uint32_t enable_widi_wa_surf: 1;
3879         uint32_t enable_widi_dirty_rect: 1;
3880         uint32_t enable_cur_fld_idr: 1;
3881         uint32_t contrained_intra_pred_flag: 1;
3882         uint32_t field_parity_flag: 1;
3883         uint32_t hme_enable: 1;
3884         uint32_t picture_type: 2;
3885         uint32_t use_actual_ref_qp_value: 1;
3886     } dw4;
3887
3888     struct {
3889         uint32_t slice_mb_height: 16;
3890         uint32_t ref_width: 8;
3891         uint32_t ref_height: 8;
3892     } dw5;
3893
3894     struct {
3895         uint32_t batch_buffer_end;
3896     } dw6;
3897
3898     struct {
3899         uint32_t intra_part_mask: 5;
3900         uint32_t non_skip_zmv_added: 1;
3901         uint32_t non_skip_mode_added: 1;
3902         uint32_t luma_intra_src_corner_swap: 1;
3903         uint32_t reserved0: 8;
3904         uint32_t mv_cost_scale_factor: 2;
3905         uint32_t bilinear_enable: 1;
3906         uint32_t src_field_polarity: 1;
3907         uint32_t weightedsad_harr: 1;
3908         uint32_t ac_only_haar: 1;
3909         uint32_t ref_id_cost_mode: 1;
3910         uint32_t reserved1: 1;
3911         uint32_t skip_center_mask: 8;
3912     } dw7;
3913
3914     struct {
3915         uint32_t mode_0_cost: 8;
3916         uint32_t mode_1_cost: 8;
3917         uint32_t mode_2_cost: 8;
3918         uint32_t mode_3_cost: 8;
3919     } dw8;
3920
3921     struct {
3922         uint32_t mode_4_cost: 8;
3923         uint32_t mode_5_cost: 8;
3924         uint32_t mode_6_cost: 8;
3925         uint32_t mode_7_cost: 8;
3926     } dw9;
3927
3928     struct {
3929         uint32_t mode_8_cost: 8;
3930         uint32_t mode_9_cost: 8;
3931         uint32_t ref_id_cost: 8;
3932         uint32_t chroma_intra_mode_cost: 8;
3933     } dw10;
3934
3935     union {
3936         struct {
3937             uint32_t mv_0_cost: 8;
3938             uint32_t mv_1_cost: 8;
3939             uint32_t mv_2_cost: 8;
3940             uint32_t mv_3_cost: 8;
3941         };
3942         uint32_t value;
3943     } dw11;
3944
3945     struct {
3946         uint32_t mv_4_cost: 8;
3947         uint32_t mv_5_cost: 8;
3948         uint32_t mv_6_cost: 8;
3949         uint32_t mv_7_cost: 8;
3950     } dw12;
3951
3952     struct {
3953         uint32_t qp_prime_y: 8;
3954         uint32_t qp_prime_cb: 8;
3955         uint32_t qp_prime_cr: 8;
3956         uint32_t target_size_in_word: 8;
3957     } dw13;
3958
3959     struct {
3960         uint32_t sic_fwd_transcoeff_threshold_0: 16;
3961         uint32_t sic_fwd_transcoeff_threshold_1: 8;
3962         uint32_t sic_fwd_transcoeff_threshold_2: 8;
3963     } dw14;
3964
3965     struct {
3966         uint32_t sic_fwd_transcoeff_threshold_3: 8;
3967         uint32_t sic_fwd_transcoeff_threshold_4: 8;
3968         uint32_t sic_fwd_transcoeff_threshold_5: 8;
3969         uint32_t sic_fwd_transcoeff_threshold_6: 8;
3970     } dw15;
3971
3972     struct {
3973         struct generic_search_path_delta sp_delta_0;
3974         struct generic_search_path_delta sp_delta_1;
3975         struct generic_search_path_delta sp_delta_2;
3976         struct generic_search_path_delta sp_delta_3;
3977     } dw16;
3978
3979     struct {
3980         struct generic_search_path_delta sp_delta_4;
3981         struct generic_search_path_delta sp_delta_5;
3982         struct generic_search_path_delta sp_delta_6;
3983         struct generic_search_path_delta sp_delta_7;
3984     } dw17;
3985
3986     struct {
3987         struct generic_search_path_delta sp_delta_8;
3988         struct generic_search_path_delta sp_delta_9;
3989         struct generic_search_path_delta sp_delta_10;
3990         struct generic_search_path_delta sp_delta_11;
3991     } dw18;
3992
3993     struct {
3994         struct generic_search_path_delta sp_delta_12;
3995         struct generic_search_path_delta sp_delta_13;
3996         struct generic_search_path_delta sp_delta_14;
3997         struct generic_search_path_delta sp_delta_15;
3998     } dw19;
3999
4000     struct {
4001         struct generic_search_path_delta sp_delta_16;
4002         struct generic_search_path_delta sp_delta_17;
4003         struct generic_search_path_delta sp_delta_18;
4004         struct generic_search_path_delta sp_delta_19;
4005     } dw20;
4006
4007     struct {
4008         struct generic_search_path_delta sp_delta_20;
4009         struct generic_search_path_delta sp_delta_21;
4010         struct generic_search_path_delta sp_delta_22;
4011         struct generic_search_path_delta sp_delta_23;
4012     } dw21;
4013
4014     struct {
4015         struct generic_search_path_delta sp_delta_24;
4016         struct generic_search_path_delta sp_delta_25;
4017         struct generic_search_path_delta sp_delta_26;
4018         struct generic_search_path_delta sp_delta_27;
4019     } dw22;
4020
4021     struct {
4022         struct generic_search_path_delta sp_delta_28;
4023         struct generic_search_path_delta sp_delta_29;
4024         struct generic_search_path_delta sp_delta_30;
4025         struct generic_search_path_delta sp_delta_31;
4026     } dw23;
4027
4028     struct {
4029         struct generic_search_path_delta sp_delta_32;
4030         struct generic_search_path_delta sp_delta_33;
4031         struct generic_search_path_delta sp_delta_34;
4032         struct generic_search_path_delta sp_delta_35;
4033     } dw24;
4034
4035     struct {
4036         struct generic_search_path_delta sp_delta_36;
4037         struct generic_search_path_delta sp_delta_37;
4038         struct generic_search_path_delta sp_delta_38;
4039         struct generic_search_path_delta sp_delta_39;
4040     } dw25;
4041
4042     struct {
4043         struct generic_search_path_delta sp_delta_40;
4044         struct generic_search_path_delta sp_delta_41;
4045         struct generic_search_path_delta sp_delta_42;
4046         struct generic_search_path_delta sp_delta_43;
4047     } dw26;
4048
4049     struct {
4050         struct generic_search_path_delta sp_delta_44;
4051         struct generic_search_path_delta sp_delta_45;
4052         struct generic_search_path_delta sp_delta_46;
4053         struct generic_search_path_delta sp_delta_47;
4054     } dw27;
4055
4056     struct {
4057         struct generic_search_path_delta sp_delta_48;
4058         struct generic_search_path_delta sp_delta_49;
4059         struct generic_search_path_delta sp_delta_50;
4060         struct generic_search_path_delta sp_delta_51;
4061     } dw28;
4062
4063     struct {
4064         struct generic_search_path_delta sp_delta_52;
4065         struct generic_search_path_delta sp_delta_53;
4066         struct generic_search_path_delta sp_delta_54;
4067         struct generic_search_path_delta sp_delta_55;
4068     } dw29;
4069
4070     struct {
4071         uint32_t intra_4x4_mode_mask: 9;
4072         uint32_t reserved0: 7;
4073         uint32_t intra_8x8_mode_mask: 9;
4074         uint32_t reserved1: 7;
4075     } dw30;
4076
4077     struct {
4078         uint32_t intra_16x16_mode_mask: 4;
4079         uint32_t intra_chroma_mode_mask: 4;
4080         uint32_t intra_compute_type: 2;
4081         uint32_t reserved0: 22;
4082     } dw31;
4083
4084     struct {
4085         uint32_t skip_val: 16;
4086         uint32_t mult_pred_l0_disable: 8;
4087         uint32_t mult_pred_l1_disable: 8;
4088     } dw32;
4089
4090     struct {
4091         uint32_t intra_16x16_nondc_penalty: 8;
4092         uint32_t intra_8x8_nondc_penalty: 8;
4093         uint32_t intra_4x4_nondc_penalty: 8;
4094         uint32_t reserved0: 8;
4095     } dw33;
4096
4097     struct {
4098         uint32_t list0_ref_id0_field_parity: 1;
4099         uint32_t list0_ref_id1_field_parity: 1;
4100         uint32_t list0_ref_id2_field_parity: 1;
4101         uint32_t list0_ref_id3_field_parity: 1;
4102         uint32_t list0_ref_id4_field_parity: 1;
4103         uint32_t list0_ref_id5_field_parity: 1;
4104         uint32_t list0_ref_id6_field_parity: 1;
4105         uint32_t list0_ref_id7_field_parity: 1;
4106         uint32_t list1_ref_id0_frm_field_parity: 1;
4107         uint32_t list1_ref_id1_frm_field_parity: 1;
4108         uint32_t widi_intra_refresh_en: 2;
4109         uint32_t arbitray_num_mbs_per_slice: 1;
4110         uint32_t force_non_skip_check: 1;
4111         uint32_t disable_enc_skip_check: 1;
4112         uint32_t enable_direct_bias_adjustment: 1;
4113         uint32_t enable_global_motion_bias_adjustment: 1;
4114         uint32_t b_force_to_skip: 1;
4115         uint32_t reserved0: 6;
4116         uint32_t list1_ref_id0_field_parity: 1;
4117         uint32_t list1_ref_id1_field_parity: 1;
4118         uint32_t mad_enable_falg: 1;
4119         uint32_t roi_enable_flag: 1;
4120         uint32_t enable_mb_flatness_check_optimization: 1;
4121         uint32_t b_direct_mode: 1;
4122         uint32_t mb_brc_enable: 1;
4123         uint32_t b_original_bff: 1;
4124     } dw34;
4125
4126     struct {
4127         uint32_t panic_mode_mb_threshold: 16;
4128         uint32_t small_mb_size_in_word: 8;
4129         uint32_t large_mb_size_in_word: 8;
4130     } dw35;
4131
4132     struct {
4133         uint32_t num_ref_idx_l0_minus_one: 8;
4134         uint32_t hme_combined_extra_sus: 8;
4135         uint32_t num_ref_idx_l1_minus_one: 8;
4136         uint32_t enable_cabac_work_around: 1;
4137         uint32_t reserved0: 3;
4138         uint32_t is_fwd_frame_short_term_ref: 1;
4139         uint32_t check_all_fractional_enable: 1;
4140         uint32_t hme_combine_overlap: 2;
4141     } dw36;
4142
4143     struct {
4144         uint32_t skip_mode_enable: 1;
4145         uint32_t adaptive_enable: 1;
4146         uint32_t bi_mix_dis: 1;
4147         uint32_t reserved0: 2;
4148         uint32_t early_ime_success_enable: 1;
4149         uint32_t reserved1: 1;
4150         uint32_t t8x8_flag_for_inter_enable: 1;
4151         uint32_t reserved2: 16;
4152         uint32_t early_ime_stop: 8;
4153     } dw37;
4154
4155     /* reserved */
4156     struct {
4157         uint32_t max_len_sp: 8;
4158         uint32_t max_num_su: 8;
4159         uint32_t ref_threshold: 16;
4160     } dw38;
4161
4162     struct {
4163         uint32_t reserved0: 8;
4164         uint32_t hme_ref_windows_comb_threshold: 8;
4165         uint32_t ref_width: 8;
4166         uint32_t ref_height: 8;
4167     } dw39;
4168
4169     struct {
4170         uint32_t dist_scale_factor_ref_id0_list0: 16;
4171         uint32_t dist_scale_factor_ref_id1_list0: 16;
4172     } dw40;
4173
4174     struct {
4175         uint32_t dist_scale_factor_ref_id2_list0: 16;
4176         uint32_t dist_scale_factor_ref_id3_list0: 16;
4177     } dw41;
4178
4179     struct {
4180         uint32_t dist_scale_factor_ref_id4_list0: 16;
4181         uint32_t dist_scale_factor_ref_id5_list0: 16;
4182     } dw42;
4183
4184     struct {
4185         uint32_t dist_scale_factor_ref_id6_list0: 16;
4186         uint32_t dist_scale_factor_ref_id7_list0: 16;
4187     } dw43;
4188
4189     struct {
4190         uint32_t actual_qp_value_for_ref_id0_list0: 8;
4191         uint32_t actual_qp_value_for_ref_id1_list0: 8;
4192         uint32_t actual_qp_value_for_ref_id2_list0: 8;
4193         uint32_t actual_qp_value_for_ref_id3_list0: 8;
4194     } dw44;
4195
4196     struct {
4197         uint32_t actual_qp_value_for_ref_id4_list0: 8;
4198         uint32_t actual_qp_value_for_ref_id5_list0: 8;
4199         uint32_t actual_qp_value_for_ref_id6_list0: 8;
4200         uint32_t actual_qp_value_for_ref_id7_list0: 8;
4201     } dw45;
4202
4203     struct {
4204         uint32_t actual_qp_value_for_ref_id0_list1: 8;
4205         uint32_t actual_qp_value_for_ref_id1_list1: 8;
4206         uint32_t ref_cost: 16;
4207     } dw46;
4208
4209     struct {
4210         uint32_t mb_qp_read_factor: 8;
4211         uint32_t intra_cost_sf: 8;
4212         uint32_t max_vmv_r: 16;
4213     } dw47;
4214
4215     struct {
4216         uint32_t widi_intra_refresh_mbx: 16;
4217         uint32_t widi_intra_refresh_unit_in_mb_minus1: 8;
4218         uint32_t widi_intra_refresh_qp_delta: 8;
4219     } dw48;
4220
4221     struct {
4222         uint32_t roi_1_x_left: 16;
4223         uint32_t roi_1_y_top: 16;
4224     } dw49;
4225
4226     struct {
4227         uint32_t roi_1_x_right: 16;
4228         uint32_t roi_1_y_bottom: 16;
4229     } dw50;
4230
4231     struct {
4232         uint32_t roi_2_x_left: 16;
4233         uint32_t roi_2_y_top: 16;
4234     } dw51;
4235
4236     struct {
4237         uint32_t roi_2_x_right: 16;
4238         uint32_t roi_2_y_bottom: 16;
4239     } dw52;
4240
4241     struct {
4242         uint32_t roi_3_x_left: 16;
4243         uint32_t roi_3_y_top: 16;
4244     } dw53;
4245
4246     struct {
4247         uint32_t roi_3_x_right: 16;
4248         uint32_t roi_3_y_bottom: 16;
4249     } dw54;
4250
4251     struct {
4252         uint32_t roi_4_x_left: 16;
4253         uint32_t roi_4_y_top: 16;
4254     } dw55;
4255
4256     struct {
4257         uint32_t roi_4_x_right: 16;
4258         uint32_t roi_4_y_bottom: 16;
4259     } dw56;
4260
4261     struct {
4262         uint32_t roi_1_dqp_prime_y: 8;
4263         uint32_t roi_2_dqp_prime_y: 8;
4264         uint32_t roi_3_dqp_prime_y: 8;
4265         uint32_t roi_4_dqp_prime_y: 8;
4266     } dw57;
4267
4268     struct {
4269         uint32_t hme_mv_cost_scaling_factor: 8;
4270         int32_t reserved0: 8;
4271         int32_t widi_intra_refresh_mby: 16;
4272     } dw58;
4273
4274     struct {
4275         uint32_t reserved;
4276     } dw59;
4277
4278     struct {
4279         uint32_t cabac_wa_zone0_threshold: 16;
4280         uint32_t cabac_wa_zone1_threshold: 16;
4281     } dw60;
4282
4283     struct {
4284         uint32_t cabac_wa_zone2_threshold: 16;
4285         uint32_t cabac_wa_zone3_threshold: 16;
4286     } dw61;
4287
4288     struct {
4289         uint32_t cabac_wa_zone0_intra_min_qp: 8;
4290         uint32_t cabac_wa_zone1_intra_min_qp: 8;
4291         uint32_t cabac_wa_zone2_intra_min_qp: 8;
4292         uint32_t cabac_wa_zone3_intra_min_qp: 8;
4293     } dw62;
4294
4295     struct {
4296         uint32_t reserved;
4297     } dw63;
4298
4299     struct {
4300         uint32_t reserved;
4301     } dw64;
4302
4303     struct {
4304         uint32_t mb_data_surf_index;
4305     } dw65;
4306
4307     struct {
4308         uint32_t mv_data_surf_index;
4309     } dw66;
4310
4311     struct {
4312         uint32_t i_dist_surf_index;
4313     } dw67;
4314
4315     struct {
4316         uint32_t src_y_surf_index;
4317     } dw68;
4318
4319     struct {
4320         uint32_t mb_specific_data_surf_index;
4321     } dw69;
4322
4323     struct {
4324         uint32_t aux_vme_out_surf_index;
4325     } dw70;
4326
4327     struct {
4328         uint32_t curr_ref_pic_sel_surf_index;
4329     } dw71;
4330
4331     struct {
4332         uint32_t hme_mv_pred_fwd_bwd_surf_index;
4333     } dw72;
4334
4335     struct {
4336         uint32_t hme_dist_surf_index;
4337     } dw73;
4338
4339     struct {
4340         uint32_t slice_map_surf_index;
4341     } dw74;
4342
4343     struct {
4344         uint32_t fwd_frm_mb_data_surf_index;
4345     } dw75;
4346
4347     struct {
4348         uint32_t fwd_frm_mv_surf_index;
4349     } dw76;
4350
4351     struct {
4352         uint32_t mb_qp_buffer;
4353     } dw77;
4354
4355     struct {
4356         uint32_t mb_brc_lut;
4357     } dw78;
4358
4359     struct {
4360         uint32_t vme_inter_prediction_surf_index;
4361     } dw79;
4362
4363     struct {
4364         uint32_t vme_inter_prediction_mr_surf_index;
4365     } dw80;
4366
4367     struct {
4368         uint32_t flatness_chk_surf_index;
4369     } dw81;
4370
4371     struct {
4372         uint32_t mad_surf_index;
4373     } dw82;
4374
4375     struct {
4376         uint32_t force_non_skip_mb_map_surface;
4377     } dw83;
4378
4379     struct {
4380         uint32_t widi_wa_surf_index;
4381     } dw84;
4382
4383     struct {
4384         uint32_t brc_curbe_surf_index;
4385     } dw85;
4386
4387     struct {
4388         uint32_t static_detection_cost_table_index;
4389     } dw86;
4390
4391     struct {
4392         uint32_t reserved0;
4393     } dw87;
4394
4395 } gen8_avc_mbenc_curbe_data;
4396
4397 typedef struct _gen8_avc_frame_brc_update_curbe_data {
4398     struct {
4399         uint32_t target_size;
4400     } dw0;
4401
4402     struct {
4403         uint32_t frame_number;
4404     } dw1;
4405
4406     struct {
4407         uint32_t size_of_pic_headers;
4408     } dw2;
4409
4410     struct {
4411         uint32_t start_gadj_frame0: 16;
4412         uint32_t start_gadj_frame1: 16;
4413     } dw3;
4414
4415     struct {
4416         uint32_t start_gadj_frame2: 16;
4417         uint32_t start_gadj_frame3: 16;
4418     } dw4;
4419
4420     struct {
4421         uint32_t target_size_flag: 8;
4422         uint32_t brc_flag: 8;
4423         uint32_t max_num_paks: 8;
4424         uint32_t cur_frame_type: 8;
4425     } dw5;
4426
4427     struct {
4428         uint32_t num_skip_frames: 8;
4429         uint32_t minimum_qp: 8;
4430         uint32_t maximum_qp: 8;
4431         uint32_t widi_intra_refresh_mode: 8;
4432     } dw6;
4433
4434     struct {
4435         uint32_t size_skip_frames;
4436     } dw7;
4437
4438     struct {
4439         uint32_t start_global_adjust_mult_0: 8;
4440         uint32_t start_global_adjust_mult_1: 8;
4441         uint32_t start_global_adjust_mult_2: 8;
4442         uint32_t start_global_adjust_mult_3: 8;
4443     } dw8;
4444
4445     struct {
4446         uint32_t start_global_adjust_mult_4: 8;
4447         uint32_t start_global_adjust_div_0: 8;
4448         uint32_t start_global_adjust_div_1: 8;
4449         uint32_t start_global_adjust_div_2: 8;
4450     } dw9;
4451
4452     struct {
4453         uint32_t start_global_adjust_div_3: 8;
4454         uint32_t start_global_adjust_div_4: 8;
4455         uint32_t qp_threshold_0: 8;
4456         uint32_t qp_threshold_1: 8;
4457     } dw10;
4458
4459     struct {
4460         uint32_t qp_threshold_2: 8;
4461         uint32_t qp_threshold_3: 8;
4462         uint32_t g_rate_ratio_threshold_0: 8;
4463         uint32_t g_rate_ratio_threshold_1: 8;
4464     } dw11;
4465
4466     struct {
4467         uint32_t g_rate_ratio_threshold_2: 8;
4468         uint32_t g_rate_ratio_threshold_3: 8;
4469         uint32_t g_rate_ratio_threshold_4: 8;
4470         uint32_t g_rate_ratio_threshold_5: 8;
4471     } dw12;
4472
4473     struct {
4474         uint32_t g_rate_ratio_threshold_qp_0: 8;
4475         uint32_t g_rate_ratio_threshold_qp_1: 8;
4476         uint32_t g_rate_ratio_threshold_qp_2: 8;
4477         uint32_t g_rate_ratio_threshold_qp_3: 8;
4478     } dw13;
4479
4480     struct {
4481         uint32_t g_rate_ratio_threshold_qp_4: 8;
4482         uint32_t g_rate_ratio_threshold_qp_5: 8;
4483         uint32_t g_rate_ratio_threshold_qp_6: 8;
4484         uint32_t qp_index_of_cur_pic: 8;
4485     } dw14;
4486
4487     struct {
4488         uint32_t widi_qp_intra_resresh: 8;
4489         uint32_t reserved0: 8;
4490     } dw15;
4491
4492     struct {
4493         uint32_t widi_intra_refresh_y_pos: 16;
4494         uint32_t widi_intra_refresh_x_pos: 16;
4495     } dw16;
4496
4497     struct {
4498         uint32_t widi_intra_refresh_height: 16;
4499         uint32_t widi_intra_refresh_width: 16;
4500     } dw17;
4501 } gen8_avc_frame_brc_update_curbe_data;
4502
4503 typedef struct _gen8_avc_scaling4x_curbe_data {
4504     struct {
4505         uint32_t   input_picture_width  : 16;
4506         uint32_t   input_picture_height : 16;
4507     } dw0;
4508
4509     struct {
4510         uint32_t   input_y_bti;
4511     } dw1;
4512
4513     struct {
4514         uint32_t   output_y_bti;
4515     } dw2;
4516
4517     struct {
4518         uint32_t   input_y_bti_bottom_field;
4519     } dw3;
4520
4521     struct {
4522         uint32_t   output_y_bti_bottom_field;
4523     } dw4;
4524
4525     struct {
4526         uint32_t flatness_threshold;
4527     } dw5;
4528
4529     struct {
4530         uint32_t enable_mb_flatness_check: 1;
4531         uint32_t enable_mb_variance_output: 1;
4532         uint32_t enable_mb_pixel_average_output: 1;
4533         uint32_t enable_block8x8_statistics_output: 1;
4534         uint32_t reserved0: 28;
4535     } dw6;
4536
4537     struct {
4538         uint32_t reserved;
4539     } dw7;
4540
4541     struct {
4542         uint32_t flatness_output_bti_top_field;
4543     } dw8;
4544
4545     struct {
4546         uint32_t flatness_output_bti_bottom_field;
4547     } dw9;
4548
4549     struct {
4550         uint32_t mbv_proc_states_bti_top_field;
4551     } dw10;
4552
4553     struct {
4554         uint32_t mbv_proc_states_bti_bottom_field;
4555     } dw11;
4556 } gen8_avc_scaling4x_curbe_data;
4557
4558 typedef enum _gen8_avc_binding_table_offset_mbenc {
4559     GEN8_AVC_MBENC_MFC_AVC_PAK_OBJ_CM                    =  0,
4560     GEN8_AVC_MBENC_IND_MV_DATA_CM                        =  1,
4561     GEN8_AVC_MBENC_BRC_DISTORTION_CM                     =  2,    // For BRC distortion for I
4562     GEN8_AVC_MBENC_CURR_Y_CM                             =  3,
4563     GEN8_AVC_MBENC_CURR_UV_CM                            =  4,
4564     GEN8_AVC_MBENC_MB_SPECIFIC_DATA_CM                   =  5,
4565     GEN8_AVC_MBENC_AUX_VME_OUT_CM                        =  6,
4566     GEN8_AVC_MBENC_REFPICSELECT_L0_CM                    =  7,
4567     GEN8_AVC_MBENC_MV_DATA_FROM_ME_CM                    =  8,
4568     GEN8_AVC_MBENC_4xME_DISTORTION_CM                    =  9,
4569     GEN8_AVC_MBENC_SLICEMAP_DATA_CM                      = 10,
4570     GEN8_AVC_MBENC_FWD_MB_DATA_CM                        = 11,
4571     GEN8_AVC_MBENC_FWD_MV_DATA_CM                        = 12,
4572     GEN8_AVC_MBENC_MBQP_CM                               = 13,
4573     GEN8_AVC_MBENC_MBBRC_CONST_DATA_CM                   = 14,
4574     GEN8_AVC_MBENC_VME_INTER_PRED_CURR_PIC_IDX_0_CM      = 15,
4575     GEN8_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX0_CM        = 16,
4576     GEN8_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX0_0_CM      = 17,
4577     GEN8_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX1_CM        = 18,
4578     GEN8_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX1_0_CM      = 19,
4579     GEN8_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX2_CM        = 20,
4580     GEN8_AVC_MBENC_RESERVED0_CM                          = 21,
4581     GEN8_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX3_CM        = 22,
4582     GEN8_AVC_MBENC_RESERVED1_CM                          = 23,
4583     GEN8_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX4_CM        = 24,
4584     GEN8_AVC_MBENC_RESERVED2_CM                          = 25,
4585     GEN8_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX5_CM        = 26,
4586     GEN8_AVC_MBENC_RESERVED3_CM                          = 27,
4587     GEN8_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX6_CM        = 28,
4588     GEN8_AVC_MBENC_RESERVED4_CM                          = 29,
4589     GEN8_AVC_MBENC_VME_INTER_PRED_FWD_PIC_IDX7_CM        = 30,
4590     GEN8_AVC_MBENC_RESERVED5_CM                          = 31,
4591     GEN8_AVC_MBENC_VME_INTER_PRED_CURR_PIC_IDX_1_CM      = 32,
4592     GEN8_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX0_1_CM      = 33,
4593     GEN8_AVC_MBENC_RESERVED6_CM                          = 34,
4594     GEN8_AVC_MBENC_VME_INTER_PRED_BWD_PIC_IDX1_1_CM      = 35,
4595     GEN8_AVC_MBENC_RESERVED7_CM                          = 36,
4596     GEN8_AVC_MBENC_FLATNESS_CHECK_CM                     = 37,
4597     GEN8_AVC_MBENC_MAD_DATA_CM                           = 38,
4598     GEN8_AVC_MBENC_FORCE_NONSKIP_MB_MAP_CM               = 39,
4599     GEN8_AVC_MBENC_WIDI_WA_DATA_CM                       = 40,
4600     GEN8_AVC_MBENC_BRC_CURBE_DATA_CM                     = 41,
4601     GEN8_AVC_MBENC_STATIC_FRAME_DETECTION_OUTPUT_CM      = 42,
4602     GEN8_AVC_MBENC_NUM_SURFACES_CM                       = 43
4603 } gen8_avc_binding_table_offset_mbenc;
4604
4605 typedef enum _gen8_avc_binding_table_offset_scaling {
4606     GEN8_SCALING_FRAME_SRC_Y_CM                 = 0,
4607     GEN8_SCALING_FRAME_DST_Y_CM                 = 1,
4608     GEN8_SCALING_FIELD_TOP_SRC_Y_CM             = 0,
4609     GEN8_SCALING_FIELD_TOP_DST_Y_CM             = 1,
4610     GEN8_SCALING_FIELD_BOT_SRC_Y_CM             = 2,
4611     GEN8_SCALING_FIELD_BOT_DST_Y_CM             = 3,
4612     GEN8_SCALING_FRAME_FLATNESS_DST_CM          = 4,
4613     GEN8_SCALING_FIELD_TOP_FLATNESS_DST_CM      = 4,
4614     GEN8_SCALING_FIELD_BOT_FLATNESS_DST_CM      = 5,
4615     GEN8_SCALING_FRAME_MBVPROCSTATS_DST_CM      = 6,
4616     GEN8_SCALING_FIELD_TOP_MBVPROCSTATS_DST_CM  = 6,
4617     GEN8_SCALING_FIELD_BOT_MBVPROCSTATS_DST_CM  = 7,
4618     GEN8_SCALING_NUM_SURFACES_CM                = 8
4619 } gen8_avc_binding_table_offset_scaling;
4620
4621 typedef struct _gen8_avc_me_curbe_data {
4622     struct {
4623         uint32_t skip_mode_enable: 1;
4624         uint32_t adaptive_enable: 1;
4625         uint32_t bi_mix_dis: 1;
4626         uint32_t reserved0: 2;
4627         uint32_t early_ime_success_enable: 1;
4628         uint32_t reserved1: 1;
4629         uint32_t t8x8_flag_for_inter_enable: 1;
4630         uint32_t reserved2: 16;
4631         uint32_t early_ime_stop: 8;
4632     } dw0;
4633
4634     struct {
4635         uint32_t max_num_mvs: 6;
4636         uint32_t reserved0: 10;
4637         uint32_t bi_weight: 6;
4638         uint32_t reserved1: 6;
4639         uint32_t uni_mix_disable: 1;
4640         uint32_t reserved2: 3;
4641     } dw1;
4642
4643     struct {
4644         uint32_t max_len_sp: 8;
4645         uint32_t max_num_su: 8;
4646         uint32_t reserved0: 16;
4647     } dw2;
4648
4649     struct {
4650         uint32_t src_size: 2;
4651         uint32_t reserved0: 2;
4652         uint32_t mb_type_remap: 2;
4653         uint32_t src_access: 1;
4654         uint32_t ref_access: 1;
4655         uint32_t search_ctrl: 3;
4656         uint32_t dual_search_path_option: 1;
4657         uint32_t sub_pel_mode: 2;
4658         uint32_t skip_type: 1;
4659         uint32_t disable_field_cache_allocation: 1;
4660         uint32_t inter_chroma_mode: 1;
4661         uint32_t ft_enable: 1;
4662         uint32_t bme_disable_fbr: 1;
4663         uint32_t block_based_skip_enable: 1;
4664         uint32_t inter_sad: 2;
4665         uint32_t intra_sad: 2;
4666         uint32_t sub_mb_part_mask: 7;
4667         uint32_t reserved1: 1;
4668     } dw3;
4669
4670     struct {
4671         uint32_t reserved0: 8;
4672         uint32_t picture_height_minus1: 8;
4673         uint32_t picture_width: 8;
4674         uint32_t reserved1: 8;
4675     } dw4;
4676
4677     struct {
4678         uint32_t reserved0: 8;
4679         uint32_t qp_prime_y: 8;
4680         uint32_t ref_width: 8;
4681         uint32_t ref_height: 8;
4682     } dw5;
4683
4684     struct {
4685         uint32_t reserved0: 3;
4686         uint32_t write_distortions: 1;
4687         uint32_t use_mv_from_prev_step: 1;
4688         uint32_t reserved1: 3;
4689         uint32_t super_combine_dist: 8;
4690         uint32_t max_vmvr: 16;
4691     } dw6;
4692
4693     struct {
4694         uint32_t reserved0: 16;
4695         uint32_t mv_cost_scale_factor: 2;
4696         uint32_t bilinear_enable: 1;
4697         uint32_t src_field_polarity: 1;
4698         uint32_t weightedsad_harr: 1;
4699         uint32_t ac_only_haar: 1;
4700         uint32_t ref_id_cost_mode: 1;
4701         uint32_t reserved1: 1;
4702         uint32_t skip_center_mask: 8;
4703     } dw7;
4704
4705     struct {
4706         uint32_t mode_0_cost: 8;
4707         uint32_t mode_1_cost: 8;
4708         uint32_t mode_2_cost: 8;
4709         uint32_t mode_3_cost: 8;
4710     } dw8;
4711
4712     struct {
4713         uint32_t mode_4_cost: 8;
4714         uint32_t mode_5_cost: 8;
4715         uint32_t mode_6_cost: 8;
4716         uint32_t mode_7_cost: 8;
4717     } dw9;
4718
4719     struct {
4720         uint32_t mode_8_cost: 8;
4721         uint32_t mode_9_cost: 8;
4722         uint32_t ref_id_cost: 8;
4723         uint32_t chroma_intra_mode_cost: 8;
4724     } dw10;
4725
4726     struct {
4727         uint32_t mv_0_cost: 8;
4728         uint32_t mv_1_cost: 8;
4729         uint32_t mv_2_cost: 8;
4730         uint32_t mv_3_cost: 8;
4731     } dw11;
4732
4733     struct {
4734         uint32_t mv_4_cost: 8;
4735         uint32_t mv_5_cost: 8;
4736         uint32_t mv_6_cost: 8;
4737         uint32_t mv_7_cost: 8;
4738     } dw12;
4739
4740     struct {
4741         uint32_t num_ref_idx_l0_minus1: 8;
4742         uint32_t num_ref_idx_l1_minus1: 8;
4743         uint32_t actual_mb_width: 8;
4744         uint32_t actual_mb_height: 8;
4745     } dw13;
4746
4747     struct {
4748         uint32_t l0_ref_id0_field_parity: 1;
4749         uint32_t l0_ref_id1_field_parity: 1;
4750         uint32_t l0_ref_id2_field_parity: 1;
4751         uint32_t l0_ref_id3_field_parity: 1;
4752         uint32_t l0_ref_id4_field_parity: 1;
4753         uint32_t l0_ref_id5_field_parity: 1;
4754         uint32_t l0_ref_id6_field_parity: 1;
4755         uint32_t l0_ref_id7_field_parity: 1;
4756         uint32_t l1_ref_id0_field_parity: 1;
4757         uint32_t l1_ref_id1_field_parity: 1;
4758         uint32_t reserved: 22;
4759     } dw14;
4760
4761     struct {
4762         uint32_t prev_mv_read_pos_factor : 8;
4763         uint32_t mv_shift_factor : 8;
4764         uint32_t reserved: 16;
4765     } dw15;
4766
4767     struct {
4768         struct generic_search_path_delta sp_delta_0;
4769         struct generic_search_path_delta sp_delta_1;
4770         struct generic_search_path_delta sp_delta_2;
4771         struct generic_search_path_delta sp_delta_3;
4772     } dw16;
4773
4774     struct {
4775         struct generic_search_path_delta sp_delta_4;
4776         struct generic_search_path_delta sp_delta_5;
4777         struct generic_search_path_delta sp_delta_6;
4778         struct generic_search_path_delta sp_delta_7;
4779     } dw17;
4780
4781     struct {
4782         struct generic_search_path_delta sp_delta_8;
4783         struct generic_search_path_delta sp_delta_9;
4784         struct generic_search_path_delta sp_delta_10;
4785         struct generic_search_path_delta sp_delta_11;
4786     } dw18;
4787
4788     struct {
4789         struct generic_search_path_delta sp_delta_12;
4790         struct generic_search_path_delta sp_delta_13;
4791         struct generic_search_path_delta sp_delta_14;
4792         struct generic_search_path_delta sp_delta_15;
4793     } dw19;
4794
4795     struct {
4796         struct generic_search_path_delta sp_delta_16;
4797         struct generic_search_path_delta sp_delta_17;
4798         struct generic_search_path_delta sp_delta_18;
4799         struct generic_search_path_delta sp_delta_19;
4800     } dw20;
4801
4802     struct {
4803         struct generic_search_path_delta sp_delta_20;
4804         struct generic_search_path_delta sp_delta_21;
4805         struct generic_search_path_delta sp_delta_22;
4806         struct generic_search_path_delta sp_delta_23;
4807     } dw21;
4808
4809     struct {
4810         struct generic_search_path_delta sp_delta_24;
4811         struct generic_search_path_delta sp_delta_25;
4812         struct generic_search_path_delta sp_delta_26;
4813         struct generic_search_path_delta sp_delta_27;
4814     } dw22;
4815
4816     struct {
4817         struct generic_search_path_delta sp_delta_28;
4818         struct generic_search_path_delta sp_delta_29;
4819         struct generic_search_path_delta sp_delta_30;
4820         struct generic_search_path_delta sp_delta_31;
4821     } dw23;
4822
4823     struct {
4824         struct generic_search_path_delta sp_delta_32;
4825         struct generic_search_path_delta sp_delta_33;
4826         struct generic_search_path_delta sp_delta_34;
4827         struct generic_search_path_delta sp_delta_35;
4828     } dw24;
4829
4830     struct {
4831         struct generic_search_path_delta sp_delta_36;
4832         struct generic_search_path_delta sp_delta_37;
4833         struct generic_search_path_delta sp_delta_38;
4834         struct generic_search_path_delta sp_delta_39;
4835     } dw25;
4836
4837     struct {
4838         struct generic_search_path_delta sp_delta_40;
4839         struct generic_search_path_delta sp_delta_41;
4840         struct generic_search_path_delta sp_delta_42;
4841         struct generic_search_path_delta sp_delta_43;
4842     } dw26;
4843
4844     struct {
4845         struct generic_search_path_delta sp_delta_44;
4846         struct generic_search_path_delta sp_delta_45;
4847         struct generic_search_path_delta sp_delta_46;
4848         struct generic_search_path_delta sp_delta_47;
4849     } dw27;
4850
4851     struct {
4852         struct generic_search_path_delta sp_delta_48;
4853         struct generic_search_path_delta sp_delta_49;
4854         struct generic_search_path_delta sp_delta_50;
4855         struct generic_search_path_delta sp_delta_51;
4856     } dw28;
4857
4858     struct {
4859         struct generic_search_path_delta sp_delta_52;
4860         struct generic_search_path_delta sp_delta_53;
4861         struct generic_search_path_delta sp_delta_54;
4862         struct generic_search_path_delta sp_delta_55;
4863     } dw29;
4864
4865     struct {
4866         uint32_t reserved0;
4867     } dw30;
4868
4869     struct {
4870         uint32_t reserved0;
4871     } dw31;
4872
4873     struct {
4874         uint32_t _4x_memv_output_data_surf_index;
4875     } dw32;
4876
4877     struct {
4878         uint32_t _16x_32x_memv_input_data_surf_index;
4879     } dw33;
4880
4881     struct {
4882         uint32_t _4x_me_output_dist_surf_index;
4883     } dw34;
4884
4885     struct {
4886         uint32_t _4x_me_output_brc_dist_surf_index;
4887     } dw35;
4888
4889     struct {
4890         uint32_t vme_fwd_inter_pred_surf_index;
4891     } dw36;
4892
4893     struct {
4894         uint32_t vme_bdw_inter_pred_surf_index;
4895     } dw37;
4896
4897     /* reserved */
4898     struct {
4899         uint32_t reserved;
4900     } dw38;
4901 } gen8_avc_me_curbe_data;
4902
4903 typedef enum _gen8_avc_binding_table_offset_me {
4904     GEN8_AVC_ME_MV_DATA_SURFACE_CM       = 0,
4905     GEN8_AVC_16xME_MV_DATA_SURFACE_CM    = 1,
4906     GEN8_AVC_32xME_MV_DATA_SURFACE_CM    = 1,
4907     GEN8_AVC_ME_DISTORTION_SURFACE_CM    = 2,
4908     GEN8_AVC_ME_BRC_DISTORTION_CM        = 3,
4909     GEN8_AVC_ME_RESERVED0_CM             = 4,
4910     GEN8_AVC_ME_CURR_FOR_FWD_REF_CM      = 5,
4911     GEN8_AVC_ME_FWD_REF_IDX0_CM          = 6,
4912     GEN8_AVC_ME_RESERVED1_CM             = 7,
4913     GEN8_AVC_ME_FWD_REF_IDX1_CM          = 8,
4914     GEN8_AVC_ME_RESERVED2_CM             = 9,
4915     GEN8_AVC_ME_FWD_REF_IDX2_CM          = 10,
4916     GEN8_AVC_ME_RESERVED3_CM             = 11,
4917     GEN8_AVC_ME_FWD_REF_IDX3_CM          = 12,
4918     GEN8_AVC_ME_RESERVED4_CM             = 13,
4919     GEN8_AVC_ME_FWD_REF_IDX4_CM          = 14,
4920     GEN8_AVC_ME_RESERVED5_CM             = 15,
4921     GEN8_AVC_ME_FWD_REF_IDX5_CM          = 16,
4922     GEN8_AVC_ME_RESERVED6_CM             = 17,
4923     GEN8_AVC_ME_FWD_REF_IDX6_CM          = 18,
4924     GEN8_AVC_ME_RESERVED7_CM             = 19,
4925     GEN8_AVC_ME_FWD_REF_IDX7_CM          = 20,
4926     GEN8_AVC_ME_RESERVED8_CM             = 21,
4927     GEN8_AVC_ME_CURR_FOR_BWD_REF_CM      = 22,
4928     GEN8_AVC_ME_BWD_REF_IDX0_CM          = 23,
4929     GEN8_AVC_ME_RESERVED9_CM             = 24,
4930     GEN8_AVC_ME_BWD_REF_IDX1_CM          = 25,
4931     GEN8_AVC_ME_RESERVED10_CM            = 26,
4932     GEN8_AVC_ME_NUM_SURFACES_CM          = 27
4933 } gen8_avc_binding_table_offset_me;
4934
4935 #endif /* I965_AVC_ENCODER_H */