OSDN Git Service

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