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_Left_UV_2X8T.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                       0xDDD0:w
  26. #endif
  27.  
  28. #if defined(_PROGRESSIVE)
  29.         // Read U+V
  30.     mov (1)     MSGSRC.0:ud             ORIX_LEFT:w                                                     { NoDDClr }             // Block origin
  31.     asr (1)     MSGSRC.1:ud             ORIY_LEFT:w                     1:w                             { NoDDClr, NoDDChk }            // NV12 U+V block origin y = half of Y comp
  32.     mov (1)     MSGSRC.2:ud             0x00070003:ud                                           { NoDDChk }             // NV12 U+V block width and height (4x8)
  33.  
  34.         send (8) LEFT_TEMP_D(0)<1>      MSGHDRU MSGSRC<8;8,1>:ud        DAPREAD RESP_LEN(1)+DWBRMSGDSC_RC+BI_DEST_UV   
  35. #endif
  36.  
  37. #if defined(_FIELD) || defined(_MBAFF)
  38.  
  39.     // FieldModeCurrentMbFlag determines how to access left MB
  40.         and.z.f0.0 (1)  null:w          r[ECM_AddrReg, BitFlags]:ub             FieldModeCurrentMbFlag:w               
  41.  
  42.     and.nz.f0.1 (1)     NULLREGW                BitFields:w     BotFieldFlag:w                          // Get bottom field flag
  43.  
  44.         // Read U+V
  45.     mov (1)     MSGSRC.0:ud             ORIX_LEFT:w                                                     { NoDDClr }             // Block origin
  46.     asr (1)     MSGSRC.1:ud             ORIY_LEFT:w                     1:w                             { NoDDClr, NoDDChk }            // NV12 U+V block origin y = half of Y comp
  47.     mov (1)     MSGSRC.2:ud             0x00070003:ud                                           { NoDDChk }             // NV12 U+V block width and height (4x8)
  48.  
  49.         // Load NV12 U+V
  50.        
  51.     // Set message descriptor
  52.  
  53.         (f0.0)  if      (1)             ILDB_LABEL(ELSE_Y_2x8T)
  54.  
  55.     // Frame picture
  56.     mov (1)     MSGDSC  RESP_LEN(1)+DWBRMSGDSC_RC+BI_DEST_UV:ud                 // Read 1 GRF from SRC_UV
  57.  
  58.         (f0.1) add (1)  MSGSRC.1:d              MSGSRC.1:d              8:w             // Add vertical offset 8 for bot MB in MBAFF mode
  59.  
  60. ILDB_LABEL(ELSE_Y_2x8T):
  61.         else    (1)             ILDB_LABEL(ENDIF_Y_2x8T)
  62.  
  63.         // Field picture
  64.     (f0.1) mov (1)      MSGDSC  RESP_LEN(1)+DWBRMSGDSC_RC_BF+BI_DEST_UV:ud  // Read 1 GRF from SRC_Y bottom field
  65.     (-f0.1) mov (1)     MSGDSC  RESP_LEN(1)+DWBRMSGDSC_RC_TF+BI_DEST_UV:ud  // Read 1 GRF from SRC_Y top field
  66.  
  67.         endif
  68. ILDB_LABEL(ENDIF_Y_2x8T):
  69.  
  70.         // Read 1 GRF from DEST surface as the above MB has been deblocked.
  71. //      send (8) BUF_D(0)<1>    MSGHDRU MSGSRC<8;8,1>:ud        MSGDSC 
  72.         send (8) LEFT_TEMP_D(0)<1>      MSGHDRU MSGSRC<8;8,1>:ud        DAPREAD MSGDSC 
  73.  
  74. #endif
  75.  
  76. // End of load_Left_UV_2x8T.asm
  77.