Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5361 | serge | 1 | /* |
2 | * All Video Processing kernels |
||
3 | * Copyright © <2010>, Intel Corporation. |
||
4 | * |
||
5 | * This program is licensed under the terms and conditions of the |
||
6 | * Eclipse Public License (EPL), version 1.0. The full text of the EPL is at |
||
7 | * http://www.opensource.org/licenses/eclipse-1.0.php. |
||
8 | * |
||
9 | */ |
||
10 | |||
11 | // Module name: DI.inc |
||
12 | |||
13 | #ifdef GT |
||
14 | // GT DI Kernel |
||
15 | #else // ILK |
||
16 | // ILK DI Kernel |
||
17 | #endif |
||
18 | |||
19 | |||
20 | //--------------------------------------------------------------------------- |
||
21 | // Binding table indices |
||
22 | //--------------------------------------------------------------------------- |
||
23 | #define nBIDX_DI_PRV 10 // Previous DI-ed frame |
||
24 | #define nBIDX_DI_CUR 13 // Current DI-ed frame |
||
25 | #define nBIDX_DN 7 // Denoised frame |
||
26 | #define nBIDX_STAT 20 // Statistics |
||
27 | #define nBIDX_DI_Source 4 // Source Surface |
||
28 | |||
29 | |||
30 | //--------------------------------------------------------------------------- |
||
31 | // Message descriptors |
||
32 | //--------------------------------------------------------------------------- |
||
33 | // Extended message descriptor |
||
34 | #define nSMPL_ENGINE 0x2 |
||
35 | #define nDATAPORT_WRITE 0x5 |
||
36 | #define nTS_EOT 0x27 // with End-Of-Thread bit ON |
||
37 | |||
38 | // Message descriptor for end-of-thread |
||
39 | // = 000 0001 (message len) 00000 (resp len) |
||
40 | // 0 (header present 0) 00000000000000 0 (URB dereferenced) 0000 |
||
41 | #define nEOT_MSGDSC 0x02000000 |
||
42 | |||
43 | // Message descriptor for sampler read |
||
44 | // = 000 0010 (message len 2) 00000 (resp len - set later, 12 or 5 or 11) |
||
45 | // 1 (header present 1) 0 11 (SIMD32/64 mode) |
||
46 | // 1000 (message type) 0000 (DI state index) |
||
47 | // 00000000 (binding table index - set later) |
||
48 | // = 0x040b8000 |
||
49 | |||
50 | // comment begin |
||
51 | // The following is commented out because of walker feature |
||
52 | // It corresponds to the #ifdef GT #else and #endif |
||
53 | //#define nSMPL_MSGDSC 0x040b8000 |
||
54 | //#define nSMPL_RESP_LEN_DI 0x00c00000 // 12 |
||
55 | //#define nSMPL_RESP_LEN_NODI_PL 0x00500000 // 5 |
||
56 | //#define nSMPL_RESP_LEN_NODI_PA 0x00900000 // 9 |
||
57 | //#define nSMPL_RESP_LEN_NODN 0x00900000 // 9 |
||
58 | //#define nSMPL_RESP_LEN_PDI 0x00b00000 // 11 |
||
59 | // comment end |
||
60 | |||
61 | #ifdef GT |
||
62 | |||
63 | #define nSMPL_MSGDSC 0x040b8000 |
||
64 | #define nSMPL_RESP_LEN_DI 0x00c00000 // 12 |
||
65 | #define nSMPL_RESP_LEN_NODI_PL 0x00500000 // 5 //DI disable, the XY stored in 5th GRF, no impact to return length |
||
66 | #define nSMPL_RESP_LEN_NODI_PA 0x00900000 // 9 //DI disable, the XY stored in 5th GRF, no impact to return length |
||
67 | #define nSMPL_RESP_LEN_NODN 0x00a00000 // 10 //NO DN, originally use 9, now we need use 10 to store the XY with walker |
||
68 | #define nSMPL_RESP_LEN_PDI 0x00b00000 // 11 |
||
69 | |||
70 | #else |
||
71 | |||
72 | #define nSMPL_MSGDSC 0x040b8000 |
||
73 | #define nSMPL_RESP_LEN_DI 0x00c00000 // 12 |
||
74 | #define nSMPL_RESP_LEN_NODI_PL 0x00500000 // 5 |
||
75 | #define nSMPL_RESP_LEN_NODI_PA 0x00900000 // 9 |
||
76 | #define nSMPL_RESP_LEN_NODN 0x00900000 // 9 |
||
77 | #define nSMPL_RESP_LEN_PDI 0x00b00000 // 11 |
||
78 | |||
79 | #endif |
||
80 | |||
81 | // Message descriptor for dataport media write |
||
82 | #ifdef GT |
||
83 | // = 000 0000 (message len - set later) 00000 (resp len 0) |
||
84 | // 1 (header present 1) 0 0 1010 (media block write) 00000 |
||
85 | // 00000000 (binding table index - set later) |
||
86 | // = 0x00094000 |
||
87 | #define nDPMW_MSGDSC 0x00094000 |
||
88 | #else // ILK |
||
89 | // = 000 0000 (message len - set later) 00000 (resp len 0) |
||
90 | // 1 (header present 1) 000 0 010 (media block write) 0000 |
||
91 | // 00000000 (binding table index - set later) |
||
92 | // = 0x00082000 |
||
93 | #define nDPMW_MSGDSC 0x00082000 |
||
94 | #endif |
||
95 | #define nDPMW_MSG_LEN_STMM 0x04000000 // 2 - STMM |
||
96 | #define nDPMW_MSG_LEN_DH 0x04000000 // 2 - Denoise history |
||
97 | #define nDPMW_MSG_LEN_PA_DN 0x0a000000 // 5 - Denoised output |
||
98 | #define nDPMW_MSG_LEN_PA_NODI 0x12000000 // 9 - Denoised output - denoise only - DI disabled |
||
99 | #define nDPMW_MSG_LEN_PL_DN 0x06000000 // 3 - Denoised output |
||
100 | #define nDPMW_MSG_LEN_PL_NODI 0x0a000000 // 5 - Denoised output - denoise only - DI disabled |
||
101 | #define nDPMW_MSG_LEN_DI 0x0a000000 // 5 - DI output |
||
102 | |||
103 | |||
104 | //--------------------------------------------------------------------------- |
||
105 | // Static and inline parameters |
||
106 | //--------------------------------------------------------------------------- |
||
107 | // Static parameters |
||
108 | .declare ubTFLD_FIRST Base=r1.27 ElementSize=1 Type=ub // top field first |
||
109 | .declare ubSRCYUVOFFSET Base=r1.4 ElementSize=1 Type=ub // source packed format |
||
110 | .declare ubDSTYUVOFFSET Base=r1.8 ElementSize=1 Type=ub // destination packed format |
||
111 | .declare uwSPITCH_DIV2 Base=r1.10 ElementSize=2 Type=uw // statistics surface pitch divided by 2 |
||
112 | |||
113 | // Inline parameters |
||
114 | .declare uwXORIGIN Base=r5.0 ElementSize=2 Type=uw // X and Y origin |
||
115 | .declare uwYORIGIN Base=r5.1 ElementSize=2 Type=uw |
||
116 | |||
117 | |||
118 | //--------------------------------------------------------------------------- |
||
119 | // Kernel GRF variables |
||
120 | //--------------------------------------------------------------------------- |
||
121 | // Message response (Denoised & DI-ed pixels & statistics) |
||
122 | .declare dRESP Base=r8 ElementSize=4 Type=d // Response message (12 or 5 or 11) |
||
123 | .declare ubRESP Base=r8 ElementSize=1 Type=ub |
||
124 | |||
125 | .declare dSTMM Base=r16 ElementSize=4 Type=d // STMM |
||
126 | .declare ubDN_HIST_NODI Base=r12 ElementSize=1 Type=ub // Denoise history data (DI disabled) |
||
127 | .declare ubDN_HIST_DI Base=r17 ElementSize=1 Type=ub // Denoise history data (DI enabled) |
||
128 | .declare uwRETURNED_POSITION_DI Base=r17 ElementSize=2 Type=uw // XY_Return_Data (DI enabled) |
||
129 | .declare uwRETURNED_POSITION_DN Base=r12 ElementSize=2 Type=uw // XY_Return_Data (DI disabled) |
||
130 | |||
131 | .declare ub1ST_FLD_DN Base=r12 ElementSize=1 Type=ub // 1st field Denoised data (DI enabled) |
||
132 | .declare d1ST_FLD_DN Base=r12 ElementSize=4 Type=d |
||
133 | .declare ub2ND_FLD_DN Base=r18 ElementSize=1 Type=ub // 2nd field Denoised data (DI enabled) |
||
134 | .declare d2ND_FLD_DN Base=r18 ElementSize=4 Type=d |
||
135 | .declare ubPRV_DI Base=r8 ElementSize=1 Type=ub // Previous frame DI (DI enabled) |
||
136 | .declare ubCUR_DI Base=r12 ElementSize=1 Type=ub // Previous frame DI (DI enabled) |
||
137 | |||
138 | // Packed denoised output |
||
139 | .declare ubDN_YUV Base=r22 ElementSize=1 Type=ub // Denoised YUV422 |
||
140 | .declare dDN_YUV Base=r22 ElementSize=4 Type=d |
||
141 | #define npDN_YUV 704 // = 22*32 = 0x280 |
||
142 | |||
143 | // Packed DI output |
||
144 | .declare dDI_YUV_PRV Base=r32 ElementSize=4 Type=d // Previous frame DI output |
||
145 | .declare dDI_YUV_CUR Base=r36 ElementSize=4 Type=d // Current frame DI output |
||
146 | #define npDI_YUV 1024 // = 32*32 = 0x |
||
147 | |||
148 | // For packed output |
||
149 | #define p422_YOFFSET a0.2 |
||
150 | #define p422_UOFFSET a0.3 |
||
151 | #define p422_VOFFSET a0.4 |
||
152 | #define pDN_TFLDSRC a0.6 |
||
153 | #define pDN_BFLDSRC a0.7 |
||
154 | #define npRESP 192 // = 6*32 |
||
155 | |||
156 | // Message source |
||
157 | .declare udMSGSRC Base=r70 ElementSize=4 Type=ud |
||
158 | .declare uwMSGSRC Base=r70 ElementSize=2 Type=uw |
||
159 | .declare dMSGSRC Base=r70 ElementSize=4 Type=d |
||
160 | |||
161 | |||
162 | //--------------------------------------------------------------------------- |
||
163 | // Kernel MRF variables |
||
164 | //--------------------------------------------------------------------------- |
||
165 | #define mMSGHDR_SMPL m1 // Sampler response: m1~m2 |
||
166 | .declare mudMSGHDR_SMPL Base=m1 ElementSize=4 Type=ud |
||
167 | .declare muwMSGHDR_SMPL Base=m1 ElementSize=2 Type=uw |
||
168 | #define mMSGHDR_DN m3 // Denoise output: m3~m7 for PA, m3~m5 for PL |
||
169 | .declare mdMSGHDR_DN Base=m3 ElementSize=4 Type=d |
||
170 | #define mMSGHDR_STAT m8 // Statistics output: m8~m9 |
||
171 | .declare mdMSGHDR_STAT Base=m8 ElementSize=4 Type=d |
||
172 | .declare mubMSGHDR_STAT Base=m8 ElementSize=1 Type=ub |
||
173 | #define mMSGHDR_DI m10 // DI output: m10~m14 |
||
174 | .declare mdMSGHDR_DI Base=m10 ElementSize=4 Type=d |
||
175 | #define mMSGHDR_EOT m15 // EOT |
||
176 | |||
177 | #ifdef GT |
||
178 | #define MSGSRC |
||
179 | #else |
||
180 | #define MSGSRC null:ud |
||
181 | #endif |
||
182 | |||
183 | |||
184 | //--------------------------------------------------------------------------- |
||
185 | // End of thread instruction |
||
186 | //--------------------------------------------------------------------------- |
||
187 | #ifdef GT |
||
188 | #define END_THREAD send (8) null<1>:d mMSGHDR_EOT nTS_EOT nEOT_MSGDSC |
||
189 | #else // ILK |
||
190 | #define END_THREAD send (8) null<1>:d mMSGHDR_EOT null:ud nTS_EOT nEOT_MSGDSC |
||
191 | #endif |
||
192 | |||
193 | |||
194 | // end of DI.inc1>1>2010> |