Subversion Repositories Kolibri OS

Rev

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.inc