Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright © <2010>, Intel Corporation.
  3.  *
  4.  * This program is licensed under the terms and conditions of the
  5.  * Eclipse Public License (EPL), version 1.0.  The full text of the EPL is at
  6.  * http://www.opensource.org/licenses/eclipse-1.0.php.
  7.  *
  8.  */
  9. // Module name: load_Cur_UV_8x8T.asm
  10. //
  11. // Load and transpose UV 8x8 block (NV12: 8x8U and 8x8V mixed)
  12. //
  13. //----------------------------------------------------------------
  14. //  Symbols need to be defined before including this module
  15. //
  16. //      Source region in :ud
  17. //      SRC_UD:                 SRC_UD Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud   (U+V for NV12)    // 4 GRFs
  18. //
  19. //      Binding table index:
  20. //      BI_SRC_UV:              Binding table index of UV surface (NV12)
  21. //
  22. //----------------------------------------------------------------
  23.  
  24. #if defined(_DEBUG)
  25.         mov             (1)             EntrySignatureC:w                       0xDDD1:w
  26. #endif
  27.     // FieldModeCurrentMbFlag determines how to access left MB
  28.         and.z.f0.0 (1)  null:w          r[ECM_AddrReg, BitFlags]:ub             FieldModeCurrentMbFlag:w               
  29.  
  30.     and.nz.f0.1 (1)     NULLREGW        BitFields:w     BotFieldFlag:w                                  // Get bottom field flag
  31.  
  32.         // Read U+V
  33.     mov (1)     MSGSRC.0:ud             ORIX_CUR:w                                              { NoDDClr }             // Block origin
  34.     asr (1)     MSGSRC.1:ud             ORIY_CUR:w                      1:w                     { NoDDClr, NoDDChk }    // NV12 U+V block origin y = half of Y comp
  35.     mov (1)     MSGSRC.2:ud             0x0007000F:ud                                   { NoDDChk }                     // NV12 U+V block width and height (16x8 bytes)
  36.  
  37.     // Set message descriptor
  38.  
  39.         (f0.0)  if      (1)             ILDB_LABEL(ELSE_UV_8X8T)
  40.  
  41.     // Frame picture
  42.     mov (1)     MSGDSC  RESP_LEN(4)+DWBRMSGDSC_SC+BI_SRC_UV:ud                  // Read 4 GRFs from SRC_UV
  43.  
  44.         (f0.1) add (1)  MSGSRC.1:d      MSGSRC.1:d              8:w             // Add vertical offset 8 for bot MB in MBAFF mode
  45.    
  46. ILDB_LABEL(ELSE_UV_8X8T):
  47.         else    (1)             ILDB_LABEL(ENDIF_UV_8X8T)
  48.  
  49.         // Field picture
  50.     (f0.1) mov (1)      MSGDSC  RESP_LEN(4)+DWBRMSGDSC_SC_BF+BI_SRC_UV:ud  // Read 4 GRFs from SRC_UV bottom field
  51.     (-f0.1) mov (1)     MSGDSC  RESP_LEN(4)+DWBRMSGDSC_SC_TF+BI_SRC_UV:ud  // Read 4 GRFs from SRC_UV top field
  52.  
  53.         asr (1) MSGSRC.1:d              MSGSRC.1:d              1:w                                     // Reduce y by half in field access mode
  54.  
  55.         endif
  56. ILDB_LABEL(ENDIF_UV_8X8T):
  57.  
  58.     send (8) SRC_UD(0)<1>       MSGHDRU MSGSRC<8;8,1>:ud        DAPREAD MSGDSC
  59.  
  60. //      #include "Transpose_Cur_UV_8x8.asm"
  61.  
  62. // End of load_UV_8x8T
  63.