2 * Copyright © <2010>, Intel Corporation.
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the
6 * "Software"), to deal in the Software without restriction, including
7 * without limitation the rights to use, copy, modify, merge, publish,
8 * distribute, sub license, and/or sell copies of the Software, and to
9 * permit persons to whom the Software is furnished to do so, subject to
10 * the following conditions:
12 * The above copyright notice and this permission notice (including the
13 * next paragraph) shall be included in all copies or substantial portions
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19 * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
20 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 // Modual name: ME_header.inc
27 // Global symbols define
33 define(`VME_MESSAGE_TYPE_INTER', `1')
34 define(`VME_MESSAGE_TYPE_INTRA', `2')
35 define(`VME_MESSAGE_TYPE_MIXED', `3')
37 define(`VME_SIC_MESSAGE_TYPE', `1')
38 define(`VME_IME_MESSAGE_TYPE', `2')
39 define(`VME_FBR_MESSAGE_TYPE', `3')
41 define(`BLOCK_32X1', `0x0000001F')
42 define(`BLOCK_4X16', `0x000F0003')
43 define(`BLOCK_8X4', `0x00070003')
45 define(`LUMA_INTRA_16x16_DISABLE', `0x1')
46 define(`LUMA_INTRA_8x8_DISABLE', `0x2')
47 define(`LUMA_INTRA_4x4_DISABLE', `0x4')
49 define(`INTRA_PRED_AVAIL_FLAG_AE', `0x60')
50 define(`INTRA_PRED_AVAIL_FLAG_B', `0x10')
51 define(`INTRA_PRED_AVAIL_FLAG_C', `0x8')
52 define(`INTRA_PRED_AVAIL_FLAG_D', `0x4')
54 define(`BIND_IDX_VME', `0')
55 define(`BIND_IDX_VME_REF0', `1')
56 define(`BIND_IDX_VME_REF1', `2')
57 define(`BIND_IDX_OUTPUT', `3')
58 define(`BIND_IDX_INEP', `4')
59 define(`BIND_IDX_COST', `8')
61 define(`SUB_PEL_MODE_INTEGER', `0x00000000')
62 define(`SUB_PEL_MODE_HALF', `0x00001000')
63 define(`SUB_PEL_MODE_QUARTER', `0x00003000')
65 define(`INTER_SAD_NONE', `0x00000000')
66 define(`INTER_SAD_HAAR', `0x00200000')
68 define(`INTRA_SAD_NONE', `0x00000000')
69 define(`INTRA_SAD_HAAR', `0x00800000')
71 define(`INTER_PART_MASK', `0x00000000')
73 define(`SEARCH_CTRL_SINGLE', `0x00000000')
74 define(`SEARCH_CTRL_DUAL_START', `0x00000100')
75 define(`SEARCH_CTRL_DUAL_RECORD', `0x00000300')
76 define(`SEARCH_CTRL_DUAL_REFERENCE', `0x00000700')
78 define(`REF_REGION_SIZE', `0x2830:UW')
79 define(`MIN_REF_REGION_SIZE', `0x2020:UW')
80 define(`DREF_REGION_SIZE', `0x2020:UW')
82 define(`BI_SUB_MB_PART_MASK', `0x0c000000')
83 define(`MAX_NUM_MV', `0x00000020')
84 define(`FB_PRUNING_ENABLE', `0x40000000')
86 define(`SEARCH_PATH_LEN', `0x00003030')
87 define(`START_CENTER', `0x30000000')
89 define(`ADAPTIVE_SEARCH_ENABLE', `0x00000002')
90 define(`INTRA_PREDICTORE_MODE', `0x11111111:UD')
92 define(`INTER_VME_OUTPUT_IN_OWS', `10')
93 define(`INTER_VME_OUTPUT_MV_IN_OWS', `8')
95 define(`INTRAMBFLAG_MASK', `0x00002000')
96 define(`MVSIZE_UW_BASE', `0x0040')
97 define(`MFC_MV32_BIT_SHIFT', `5')
98 define(`CBP_DC_YUV_UW', `0x000E')
100 define(`DC_HARR_ENABLE', `0x0000')
101 define(`DC_HARR_DISABLE', `0x0020')
103 define(`MV32_BIT_MASK', `0x0020')
104 define(`MV32_BIT_SHIFT', `5')
106 define(`OBW_CACHE_TYPE', `10')
109 define(`OBW_MESSAGE_TYPE', `8')
111 define(`OBW_BIND_IDX', `BIND_IDX_OUTPUT')
113 define(`OBW_CONTROL_0', `0') /* 1 OWord, low 128 bits */
114 define(`OBW_CONTROL_1', `1') /* 1 OWord, high 128 bits */
115 define(`OBW_CONTROL_2', `2') /* 2 OWords */
116 define(`OBW_CONTROL_3', `3') /* 4 OWords */
117 define(`OBW_CONTROL_8', `4') /* 8 OWords */
119 define(`FBR_BME_ENABLE', `0x00000000')
120 define(`FBR_BME_DISABLE', `0x00040000')
122 define(`OBW_WRITE_COMMIT_CATEGORY', `0') /* category on Ivybridge */
125 define(`OBW_HEADER_PRESENT', `1')
129 * r1~r4 constant buffer (reserved)
132 * r12 write back of VME message
133 * r13 write back of Oword Block Write
138 define(`thread_id_ub', `r0.20<0,1,0>:UB') /* thread id in payload */
141 * GRF 1~4 -- Constant Buffer (reserved)
145 * GRF 5 -- inline data
147 define(`inline_reg0', `r5')
148 define(`w_in_mb_uw', `inline_reg0.2')
149 define(`orig_xy_ub', `inline_reg0.0')
150 define(`orig_x_ub', `inline_reg0.0') /* in macroblock */
151 define(`orig_y_ub', `inline_reg0.1')
152 define(`transform_8x8_ub', `inline_reg0.4')
153 define(`input_mb_intra_ub', `inline_reg0.5')
154 define(`num_macroblocks', `inline_reg0.6')
155 define(`quality_level_ub', `inline_reg0.7')
157 define(`qp_ub', `inline_reg0.8')
160 * GRF 6~11 -- reserved
164 * GRF 12~15 -- write back for VME message
166 define(`vme_wb', `r12')
167 define(`vme_wb0', `r12')
168 define(`vme_wb1', `r13')
169 define(`vme_wb2', `r14')
170 define(`vme_wb3', `r15')
171 define(`vme_wb4', `r16')
172 define(`vme_wb5', `r17')
173 define(`vme_wb6', `r18')
174 define(`vme_ime_wb7', `r19')
175 define(`vme_ime_wb8', `r20')
176 define(`vme_ime_wb9', `r21')
177 define(`vme_ime_wb10', `r22')
181 * GRF 24 -- write for VME output message
183 define(`obw_wb', `null<1>:W')
184 define(`obw_wb_length', `0')
188 * GRF 28~30 -- Intra Neighbor Edge Pixels
190 define(`INEP_ROW', `r28')
191 define(`INEP_COL0', `r29')
192 define(`INEP_COL1', `r30')
195 * GRF 48~50 -- Chroma Neighbor Edge Pixels
197 define(`CHROMA_ROW', `r48')
198 define(`CHROMA_COL', `r49')
201 * temporary registers
203 define(`tmp_reg0', `r32')
204 define(`read0_header', `tmp_reg0')
205 define(`tmp_reg1', `r33')
206 define(`read1_header', `tmp_reg1')
207 define(`tmp_reg2', `r34')
208 define(`vme_m0', `tmp_reg2')
209 define(`tmp_reg3', `r35')
210 define(`vme_m1', `tmp_reg3')
211 define(`intra_flag', `vme_m1.28')
212 define(`intra_part_mask_ub', `vme_m1.28')
213 define(`mb_intra_struct_ub', `vme_m1.29')
214 define(`tmp_reg4', `r36')
215 define(`obw_m0', `tmp_reg4')
216 define(`tmp_reg5', `r37')
217 define(`obw_m1', `tmp_reg5')
218 define(`tmp_reg6', `r38')
219 define(`obw_m2', `tmp_reg6')
220 define(`tmp_reg7', `r39')
221 define(`obw_m3', `tmp_reg7')
222 define(`tmp_reg8', `r40')
223 define(`obw_m4', `tmp_reg8')
224 define(`tmp_reg9', `r41')
225 define(`tmp_x_w', `tmp_reg9.0')
226 define(`tmp_rega', `r42')
227 define(`tmp_ud0', `tmp_rega.0')
228 define(`tmp_ud1', `tmp_rega.4')
229 define(`tmp_ud2', `tmp_rega.8')
230 define(`tmp_ud3', `tmp_rega.12')
231 define(`tmp_uw0', `tmp_rega.0')
232 define(`tmp_uw1', `tmp_rega.2')
233 define(`tmp_uw2', `tmp_rega.4')
234 define(`tmp_uw3', `tmp_rega.6')
235 define(`tmp_uw4', `tmp_rega.8')
236 define(`tmp_uw5', `tmp_rega.10')
237 define(`tmp_uw6', `tmp_rega.12')
238 define(`tmp_uw7', `tmp_rega.14')
240 define(`vme_m2', `r43')
241 define(`vme_cost_wb', `r44')
246 define(`msg_ind', `64')
247 define(`msg_reg0', `r64')
248 define(`msg_reg1', `r65')
249 define(`msg_reg2', `r66')
250 define(`msg_reg3', `r67')
251 define(`msg_reg4', `r68')
252 define(`msg_reg5', `r69')
253 define(`msg_reg6', `r70')
254 define(`msg_reg7', `r71')
255 define(`msg_reg8', `r72')
256 define(`msg_reg9', `r73')
258 define(`ts_msg_ind', `112')
259 define(`ts_msg_reg0', `r112')
261 * VME message payload
264 define(`vme_intra_wb_length', `1')
265 define(`vme_wb_length', `7')
266 define(`sic_vme_msg_length', `7')
267 define(`fbr_vme_msg_length', `7')
268 define(`ime_vme_msg_length', `5')
270 define(`vme_msg_ind', `msg_ind')
271 define(`vme_msg_0', `msg_reg0')
272 define(`vme_msg_1', `msg_reg1')
273 define(`vme_msg_2', `msg_reg2')
275 define(`vme_msg_3', `msg_reg3')
276 define(`vme_msg_4', `msg_reg4')
279 define(`vme_msg_5', `msg_reg5')
280 define(`vme_msg_6', `msg_reg6')
281 define(`vme_msg_7', `msg_reg7')
282 define(`vme_msg_8', `msg_reg8')
283 define(`vme_msg_9', `msg_reg9')
285 define(`BIND_IDX_CBCR', `6')
288 define(`LUMA_CHROMA_MODE', `0x0')
289 define(`LUMA_INTRA_MODE', `0x1')
290 define(`LUMA_INTRA_DISABLE', `0x2')
292 define(`RETURN_REG', `r127.0')
293 define(`RET_ARG', `r127.4')
295 /* Now at most two registers are used for input parameter */
296 define(`INPUT_ARG0', `r125')
297 define(`INPUT_ARG1', `r126')
299 /* Two temporal registers are used in the function */
300 define(`TEMP_VAR0', `r123')
301 define(`TEMP_VAR1', `r124')
304 define(`OBR_MESSAGE_TYPE', `0')
305 define(`OBR_CACHE_TYPE', `10')
306 define(`OBR_BIND_IDX', `BIND_IDX_OUTPUT')
308 define(`OBR_CONTROL_0', `0') /* 1 OWord, low 128 bits */
309 define(`OBR_CONTROL_1', `1') /* 1 OWord, high 128 bits */
310 define(`OBR_CONTROL_2', `2') /* 2 OWords */
311 define(`OBR_CONTROL_4', `3') /* 4 OWords */
312 define(`OBR_CONTROL_8', `4') /* 8 OWords */
313 define(`OBR_WRITE_COMMIT_CATEGORY', `0') /* category on SNB+ for Data port */
314 define(`OBR_HEADER_PRESENT', `1')
316 define(`mb_hwdep', `r5.6')
317 define(`MB_AVAIL', `1:d')
318 define(`MB_PRED_FLAG', `1:w')
320 define(`mb_pred_mode', `r85')
321 define(`mb_mvp_ref', `r86')
322 define(`mba_result', `r87')
323 define(`mbb_result', `r88')
324 define(`mbc_result', `r89')
325 define(`mb_ind', `90')
326 define(`mb_msg0', `r90')
327 define(`mb_wb', `r91')
328 define(`mb_intra_wb', `r91')
329 define(`mb_inter_wb', `r92')
330 define(`mb_mv0', `r93')
331 define(`mb_mv1', `r94')
332 define(`mb_mv2', `r95')
333 define(`mb_mv3', `r96')
334 define(`mb_ref', `r97')
335 define(`mb_ref_win', `r84')
337 define(`PRED_L0', `0x0':uw)
338 define(`PRED_L1', `0x1':uw)
339 define(`PRED_BI', `0x2':uw)
340 define(`PRED_DIRECT', `0x3':uw)
341 define(`PRED_MASK', `0x3':uw)
343 /* The MAX search len per reference is 16 */
344 define(`DSEARCH_PATH_LEN', `0x00001212')
345 define(`BI_WEIGHT', `0x20':uw)
346 define(`DSTART_CENTER', `0x00000000')
347 define(`INTER_MASK', `0x03')
348 define(`INTER_16X16MODE', `0x0')
349 define(`INTER_16X8MODE', `0x01')
350 define(`INTER_8X16MODE', `0x02')
351 define(`INTER_8X8MODE', `0x03')
352 define(`INTER_BLOCK0', `0x0')
353 define(`INTER_BLOCK1', `0x1')
354 define(`INTER_BLOCK2', `0x2')
355 define(`INTER_BLOCK3', `0x3')
356 define(`INTER_16X8MODE', `0x01')
357 define(`INTER_8X16MODE', `0x02')
359 define(`OBR_MESSAGE_FENCE', `7')
360 define(`OBR_MF_NOCOMMIT', `0')
361 define(`OBR_MF_COMMIT', `0x20')
363 define(`DEFAULT_QUALITY_LEVEL', `0x01')
364 define(`HIGH_QUALITY_LEVEL', `DEFAULT_QUALITY_LEVEL')
365 define(`LOW_QUALITY_LEVEL', `0x02')