Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

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