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 / mc / save_I_PCM.asm
1 /*\r
2  * Save I_PCM Y samples to Y picture buffer\r
3  * Copyright © <2010>, Intel Corporation.\r
4  *\r
5  * This program is licensed under the terms and conditions of the\r
6  * Eclipse Public License (EPL), version 1.0.  The full text of the EPL is at\r
7  * http://www.opensource.org/licenses/eclipse-1.0.php.\r
8  *\r
9  */\r
10 // Module name: save_I_PCM.asm\r
11 //\r
12 // First save I_PCM Y samples to Y picture buffer\r
13 //\r
14     mov (1) MSGSRC.2:ud         0x000F000F:ud {NoDDClr}                 // Block width and height (16x16)\r
15         shl (2) MSGSRC.0:ud             ORIX<2;2,1>:ub  4:w     {NoDDChk}       // Convert MB origin in pixel unit\r
16 \r
17     add (1)     MSGDSC  REG_MBAFF_FIELD<0;1,0>:uw       MSG_LEN(8)+DWBWMSGDSC_WC+DESTY:ud  // Set message descriptor\r
18 \r
19     $for(0; <8; 2) {\r
20         mov (32)        MSGPAYLOAD(%1)<1>               I_PCM_Y(%1)REGION(16,1) {Compr,NoDDClr}\r
21         mov (32)        MSGPAYLOAD(%1,16)<1>    I_PCM_Y(%1,16)REGION(16,1) {Compr,NoDDChk}\r
22     }\r
23 \r
24     send (8)    REG_WRITE_COMMIT_Y<1>:ud        MSGHDR  MSGSRC<8;8,1>:ud        DAPWRITE        MSGDSC\r
25 \r
26 // Then save I_PCM U/V samples to U/V picture buffer\r
27 //\r
28     mov (1) MSGHDR.2:ud         0x0007000F:ud                   {NoDDClr}       // Block width and height (16x8)\r
29     asr (1) MSGHDR.1:ud         MSGSRC.1<0;1,0>:ud      1:w {NoDDChk}   // Y offset should be halved\r
30     add (1)     MSGDSC                  MSGDSC                  0x0-MSG_LEN(4)+0x1:d    // Set message descriptor for U/V\r
31 \r
32 #if 0\r
33     and.z.f0.0 (1)  NULLREG REG_CHROMA_FORMAT_IDC  CHROMA_FORMAT_IDC:ud\r
34         (f0.0) jmpi (1) MONOCHROME_I_PCM\r
35 #endif\r
36 \r
37 #ifndef MONO\r
38 // Non-monochrome picture\r
39 //\r
40     $for(0,0; <4; 2,1) {\r
41         mov (16)        MSGPAYLOAD(%1)<2>               I_PCM_UV(%2)REGION(16,1)                // U data\r
42         mov (16)        MSGPAYLOAD(%1,1)<2>             I_PCM_UV(%2+2)REGION(16,1)              // V data\r
43         mov (16)        MSGPAYLOAD(%1+1)<2>             I_PCM_UV(%2,16)REGION(16,1)             // U data\r
44         mov (16)        MSGPAYLOAD(%1+1,1)<2>   I_PCM_UV(%2+2,16)REGION(16,1)   // V data\r
45         }\r
46 #else   // defined(MONO)\r
47 MONOCHROME_I_PCM:\r
48     $for(0; <4; 2) {\r
49         mov (16)        MSGPAYLOADD(%1)<1>              0x80808080:ud {Compr}\r
50         }\r
51 \r
52 #endif  // !defined(MONO)\r
53 \r
54     send (8)    REG_WRITE_COMMIT_UV<1>:ud       MSGHDR  null:ud DAPWRITE        MSGDSC\r
55 \r
56 // End of save_I_PCM\r