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_Top_UV_8X2.Asm
  10. //
  11. // Load UV 8X2 Block
  12. //
  13. //----------------------------------------------------------------
  14. //  Symbols ceed To be defined before including this module
  15. //
  16. //      Source Region Is :UB
  17. //      BUF_D:                  BUF_D Base=Rxx Elementsize=4 Srcregion=Region(8,1) Type=UD
  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                       0xDDD2:w
  26. #endif
  27.  
  28.     // FieldModeCurrentMbFlag determines how to access above MB
  29.         and.z.f0.0 (1)  null:w          r[ECM_AddrReg, BitFlags]:ub             FieldModeCurrentMbFlag:w               
  30.  
  31.     and.nz.f0.1 (1) NULLREGW    BitFields:w     BotFieldFlag:w
  32.  
  33.         // Read U+V
  34.     mov (1)     MSGSRC.0:ud             ORIX_TOP:w                                              { NoDDClr }                     // Block origin
  35.     asr (1)     MSGSRC.1:d              ORIY_TOP:w                      1:w                     { NoDDClr, NoDDChk }    // NV12 U+V block origin y = half of Y comp
  36.     mov (1)     MSGSRC.2:ud             0x0001000F:ud                                   { NoDDChk }                     // NV12 U+V block width and height (16x2)
  37.  
  38.         // Load NV12 U+V
  39.        
  40.     // Set message descriptor
  41.    
  42.         (f0.0)  if      (1)             ELSE_UV_8X2
  43.  
  44.     // Frame picture
  45.     mov (1)     MSGDSC  RESP_LEN(1)+DWBRMSGDSC_RC+BI_DEST_UV:ud                 // Read 1 GRF from SRC_UV
  46.  
  47.         // Add vertical offset 8 for bot MB in MBAFF mode
  48.         (f0.1) add (1)  MSGSRC.1:d      MSGSRC.1:d              8:w            
  49.    
  50.         // Dual field mode setup
  51.         and.z.f0.1 (1) NULLREGW         DualFieldMode:w         1:w
  52.         (f0.1) jmpi NOT_DUAL_FIELD_UV
  53.  
  54.     add (1)     MSGSRC.1:d              MSGSRC.1:d              -2:w                    { NoDDClr }                     // Load 4 lines in stead of 2
  55.         mov (1) MSGSRC.2:ud             0x0003000F:ud                                   { NoDDChk }                     // New block width and height (16x8)
  56.  
  57.         add (1) MSGDSC                  MSGDSC                  RESP_LEN(1):ud  // 1 more GRF to receive
  58.  
  59. NOT_DUAL_FIELD_UV:    
  60.    
  61. ELSE_UV_8X2:
  62.         else    (1)             ENDIF_UV_8X2
  63.  
  64.         // Field picture
  65.         asr (1) MSGSRC.1:d              ORIY_CUR:w              2:w                     // asr 1: NV12 U+V block origin y = half of Y comp
  66.                                                                                                                 // asr 1: Reduce y by half in field access mode
  67.        
  68.     (f0.1) mov (1)      MSGDSC  RESP_LEN(1)+DWBRMSGDSC_RC_BF+BI_DEST_UV:ud  // Read 1 GRF from SRC_Y bottom field
  69.     (-f0.1) mov (1)     MSGDSC  RESP_LEN(1)+DWBRMSGDSC_RC_TF+BI_DEST_UV:ud  // Read 1 GRF from SRC_Y top field
  70.  
  71.         add (1) MSGSRC.1:d              MSGSRC.1:d              -2:w                            // for last 2 rows of above MB
  72.  
  73.         endif
  74. ENDIF_UV_8X2:
  75.  
  76.         // Read 1 GRF from DEST surface as the above MB has been deblocked.
  77.         send (8) PREV_MB_UD(0)<1>       MSGHDRU MSGSRC<8;8,1>:ud        DAPREAD MSGDSC 
  78.  
  79. // End of load_Top_UV_8x2.asm
  80.