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_Cur_UV_8x8_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_Cur_UV_8x8.asm\r
10 //\r
11 // Save UV 8x8 block (8x8U + 8x8V in NV12)\r
12 //\r
13 //----------------------------------------------------------------\r
14 //  Symbols need to be defined before including this module\r
15 //\r
16 //      Source region in :ud\r
17 //      SRC_UD:                 SRC_UD Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud                     // 4 GRF\r
18 //\r
19 //      Binding table index: \r
20 //      BI_DEST_UV:             Binding table index of UV surface (NV12)\r
21 //\r
22 //----------------------------------------------------------------\r
23 \r
24 #if defined(_DEBUG) \r
25         mov             (1)             EntrySignatureC:w                       0xDDD4:w\r
26 #endif\r
27 \r
28         and.z.f0.0 (1)  null:w          r[ECM_AddrReg, BitFlags]:ub             FieldModeCurrentMbFlag:w                \r
29 \r
30     and.nz.f0.1 (1)     NULLREGW        BitFields:w     BotFieldFlag:w\r
31 \r
32     mov (1)     MSGSRC.0:ud             ORIX_CUR:w                                      { NoDDClr }     // Block origin\r
33     asr (1)     MSGSRC.1:ud             ORIY_CUR:w                      1:w             { NoDDClr, NoDDChk }    // NV12 U+V block origin y = half of Y comp\r
34     mov (1)     MSGSRC.2:ud             0x0007000F:ud                           { NoDDChk }             // NV12 U+V block width and height (16x8)\r
35 \r
36         mov (16)        MSGPAYLOADD(0)<1>               SRC_UD(0)               // Compressed inst\r
37         mov (16)        MSGPAYLOADD(2)<1>               SRC_UD(2)\r
38 \r
39     // Set message descriptor\r
40     \r
41         (f0.0)  if      (1)             ELSE_UV_8X8\r
42     \r
43     // Frame picture\r
44     mov (1)     MSGDSC  MSG_LEN(4)+DWBWMSGDSC+BI_DEST_UV:ud                     // Write 4 GRFs to DEST_UV\r
45 \r
46         (f0.1) add (1)  MSGSRC.1:d      MSGSRC.1:d              8:w             // Add vertical offset 8 for bot MB in MBAFF mode\r
47 \r
48 ELSE_UV_8X8: \r
49         else    (1)             ENDIF_UV_8X8\r
50 \r
51         // Field picture\r
52     (f0.1) mov (1)      MSGDSC  MSG_LEN(4)+DWBWMSGDSC+ENMSGDSCBF+BI_DEST_UV:ud  // Write 4 GRFs to DEST_UV bottom field\r
53     (-f0.1) mov (1)     MSGDSC  MSG_LEN(4)+DWBWMSGDSC+ENMSGDSCTF+BI_DEST_UV:ud  // Write 4 GRFs to DEST_UV top field\r
54 \r
55         asr (1) MSGSRC.1:d              MSGSRC.1:d              1:w                                     // Reduce y by half in field access mode\r
56 \r
57         endif\r
58 ENDIF_UV_8X8:\r
59     \r
60     send (8)    null:ud         MSGHDR          MSGSRC<8;8,1>:ud        DAPWRITE        MSGDSC\r
61 \r
62 // End of save_Cur_UV_8x8.asm\r