Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5361 | serge | 1 | /* |
2 | * Copyright © <2010>, Intel Corporation. |
||
3 | * |
||
4 | * This program is licensed under the terms and conditions of the |
||
5 | * Eclipse Public License (EPL), version 1.0. The full text of the EPL is at |
||
6 | * http://www.opensource.org/licenses/eclipse-1.0.php. |
||
7 | * |
||
8 | */ |
||
9 | // Module name: save_Left_UV_8x2T.asm |
||
10 | // |
||
11 | // Transpose 8x2 to 2x8 UV data and write to memory |
||
12 | // |
||
13 | //---------------------------------------------------------------- |
||
14 | // Symbols need to be defined before including this module |
||
15 | // |
||
16 | // Left MB region: |
||
17 | // PREV_MB_UW: Base=ryy ElementSize=2 SrcRegion=REGION(8,1) Type=uw |
||
18 | |||
19 | // Binding table index: |
||
20 | // BI_SRC_UV: Binding table index of UV surface (NV12) |
||
21 | // |
||
22 | // Temp buffer: |
||
23 | // BUF_W: BUF_W Base=rxx ElementSize=1 SrcRegion=REGION(8,1) Type=uw |
||
24 | // |
||
25 | // |
||
26 | #if defined(_DEBUG) |
||
27 | mov (1) EntrySignatureC:w 0xDDD6:w |
||
28 | #endif |
||
29 | |||
30 | and.z.f0.0 (1) null:w r[ECM_AddrReg, BitFlags]:ub FieldModeCurrentMbFlag:w |
||
31 | |||
32 | and.nz.f0.1 (1) NULLREGW BitFields:w BotFieldFlag:w |
||
33 | |||
34 | // Transpose U/V, save them to MRFs in NV12 format |
||
35 | mov (1) MSGSRC.0:ud ORIX_LEFT:w { NoDDClr } // Block origin |
||
36 | asr (1) MSGSRC.1:ud ORIY_LEFT:w 1:w { NoDDClr, NoDDChk } // NV12 U+V block origin y = half of Y comp |
||
37 | mov (1) MSGSRC.2:ud 0x00070003:ud { NoDDChk } // NV12 U+V block width and height (4x8) |
||
38 | |||
39 | |||
40 | // 16x2 UV src in GRF (each pix is specified as yx) |
||
41 | // +-----------------------+-----------------------+-----------------------+-----------------------+ |
||
42 | // |71 71 61 61 51 51 41 41 31 31 21 21 11 11 01 01 70 70 60 60 50 50 40 40 30 30 20 20 10 10 00 00| |
||
43 | // +-----------------------+-----------------------+-----------------------+-----------------------+ |
||
44 | // |
||
45 | // First step (8) <1> <=== <8;4,1>:w |
||
46 | // +-----------------------+-----------------------+-----------------------+-----------------------+ |
||
47 | // |71 71 61 61 51 51 41 41 70 70 60 60 50 50 40 40 31 31 21 21 11 11 01 01 30 30 20 20 10 10 00 00| |
||
48 | // +-----------------------+-----------------------+-----------------------+-----------------------+ |
||
49 | mov (8) BUF_W(0,0)<1> PREV_MB_UW(0,0)<8;4,1> { NoDDClr } |
||
50 | mov (8) BUF_W(0,8)<1> PREV_MB_UW(0,4)<8;4,1> { NoDDChk } |
||
51 | |||
52 | // Second step (8) <1> <=== <1;2,4> |
||
53 | // +-----------------------+-----------------------+-----------------------+-----------------------+ |
||
54 | // |71 71 70 70 61 61 60 60 51 51 50 50 41 41 40 40 31 31 30 30 21 21 20 20 11 11 10 10 01 01 00 00| |
||
55 | // +-----------------------+-----------------------+-----------------------+-----------------------+ |
||
56 | mov (8) MSGPAYLOADW(0,0)<1> BUF_W(0,0)<1;2,4> |
||
57 | mov (8) MSGPAYLOADW(0,8)<1> BUF_W(0,8)<1;2,4> |
||
58 | |||
59 | // Transposed U+V in NV12 in 4x8 is ready for writting to dataport. |
||
60 | |||
61 | // Set message descriptor |
||
62 | |||
63 | (f0.0) if (1) ELSE_UV_8X2T |
||
64 | |||
65 | // Frame picture |
||
66 | mov (1) MSGDSC MSG_LEN(1)+DWBWMSGDSC+BI_DEST_UV:ud // Write 1 GRF to DEST_UV |
||
67 | |||
68 | (f0.1) add (1) MSGSRC.1:d MSGSRC.1:d 8:w // Add vertical offset 8 for bot MB in MBAFF mode |
||
69 | |||
70 | ELSE_UV_8X2T: |
||
71 | else (1) ENDIF_UV_8X2T |
||
72 | |||
73 | // Field picture |
||
74 | (f0.1) mov (1) MSGDSC MSG_LEN(1)+DWBWMSGDSC+ENMSGDSCBF+BI_DEST_UV:ud // Write 1 GRF to DEST_UV bottom field |
||
75 | (-f0.1) mov (1) MSGDSC MSG_LEN(1)+DWBWMSGDSC+ENMSGDSCTF+BI_DEST_UV:ud // Write 1 GRF to DEST_UV top field |
||
76 | |||
77 | asr (1) MSGSRC.1:d MSGSRC.1:d 1:w // Reduce y by half in field access mode |
||
78 | |||
79 | endif |
||
80 | ENDIF_UV_8X2T: |
||
81 | |||
82 | send (8) null:ud MSGHDR MSGSRC<8;8,1>:ud DAPWRITE MSGDSC8;8,1>1;2,4>1>1;2,4>1>1;2,4>===>1>8;4,1>1>8;4,1>1>8;4,1>===>1>2010> |