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 / load_Left_UV_2x8T.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: Load_Left_UV_2X8T.Asm\r
10 //\r
11 // Load UV 8X2 Block \r
12 //\r
13 //----------------------------------------------------------------\r
14 //  Symbols ceed To be defined before including this module\r
15 //\r
16 //      Source Region Is :UB\r
17 //      BUF_D:                  BUF_D Base=Rxx Elementsize=4 Srcregion=Region(8,1) Type=UD\r
18 \r
19 //      Binding Table Index: \r
20 //      BI_SRC_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                       0xDDD0:w\r
26 #endif\r
27 \r
28 #if defined(_PROGRESSIVE) \r
29         // Read U+V\r
30     mov (1)     MSGSRC.0:ud             ORIX_LEFT:w                                                     { NoDDClr }             // Block origin\r
31     asr (1)     MSGSRC.1:ud             ORIY_LEFT:w                     1:w                             { NoDDClr, NoDDChk }            // NV12 U+V block origin y = half of Y comp\r
32     mov (1)     MSGSRC.2:ud             0x00070003:ud                                           { NoDDChk }             // NV12 U+V block width and height (4x8)\r
33 \r
34         send (8) LEFT_TEMP_D(0)<1>      MSGHDRU MSGSRC<8;8,1>:ud        DAPREAD RESP_LEN(1)+DWBRMSGDSC_RC+BI_DEST_UV    \r
35 #endif\r
36 \r
37 #if defined(_FIELD) || defined(_MBAFF)\r
38 \r
39     // FieldModeCurrentMbFlag determines how to access left MB\r
40         and.z.f0.0 (1)  null:w          r[ECM_AddrReg, BitFlags]:ub             FieldModeCurrentMbFlag:w                \r
41 \r
42     and.nz.f0.1 (1)     NULLREGW                BitFields:w     BotFieldFlag:w                          // Get bottom field flag\r
43 \r
44         // Read U+V\r
45     mov (1)     MSGSRC.0:ud             ORIX_LEFT:w                                                     { NoDDClr }             // Block origin\r
46     asr (1)     MSGSRC.1:ud             ORIY_LEFT:w                     1:w                             { NoDDClr, NoDDChk }            // NV12 U+V block origin y = half of Y comp\r
47     mov (1)     MSGSRC.2:ud             0x00070003:ud                                           { NoDDChk }             // NV12 U+V block width and height (4x8)\r
48 \r
49         // Load NV12 U+V \r
50         \r
51     // Set message descriptor\r
52 \r
53         (f0.0)  if      (1)             ILDB_LABEL(ELSE_Y_2x8T)\r
54 \r
55     // Frame picture\r
56     mov (1)     MSGDSC  RESP_LEN(1)+DWBRMSGDSC_RC+BI_DEST_UV:ud                 // Read 1 GRF from SRC_UV\r
57 \r
58         (f0.1) add (1)  MSGSRC.1:d              MSGSRC.1:d              8:w             // Add vertical offset 8 for bot MB in MBAFF mode\r
59 \r
60 ILDB_LABEL(ELSE_Y_2x8T): \r
61         else    (1)             ILDB_LABEL(ENDIF_Y_2x8T)\r
62 \r
63         // Field picture\r
64     (f0.1) mov (1)      MSGDSC  RESP_LEN(1)+DWBRMSGDSC_RC_BF+BI_DEST_UV:ud  // Read 1 GRF from SRC_Y bottom field\r
65     (-f0.1) mov (1)     MSGDSC  RESP_LEN(1)+DWBRMSGDSC_RC_TF+BI_DEST_UV:ud  // Read 1 GRF from SRC_Y top field\r
66 \r
67         endif\r
68 ILDB_LABEL(ENDIF_Y_2x8T):\r
69 \r
70         // Read 1 GRF from DEST surface as the above MB has been deblocked.\r
71 //      send (8) BUF_D(0)<1>    MSGHDRU MSGSRC<8;8,1>:ud        MSGDSC  \r
72         send (8) LEFT_TEMP_D(0)<1>      MSGHDRU MSGSRC<8;8,1>:ud        DAPREAD MSGDSC  \r
73 \r
74 #endif\r
75 \r
76 // End of load_Left_UV_2x8T.asm\r