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.     // FieldModeCurrentMbFlag determines how to access left 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                          // Get bottom field flag
  32.  
  33.         // Read U+V
  34.     mov (1)     MSGSRC.0:ud             ORIX_LEFT:w                                                     { NoDDClr }             // Block origin
  35.     asr (1)     MSGSRC.1:ud             ORIY_LEFT:w                     1:w                             { NoDDClr, NoDDChk }            // NV12 U+V block origin y = half of Y comp
  36.     mov (1)     MSGSRC.2:ud             0x00070003:ud                                           { NoDDChk }             // NV12 U+V block width and height (4x8)
  37.  
  38.         // Load NV12 U+V
  39.        
  40.     // Set message descriptor
  41.  
  42.         (f0.0)  if      (1)             ILDB_LABEL(ELSE_Y_2x8T)
  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.         (f0.1) add (1)  MSGSRC.1:d              MSGSRC.1:d              8:w             // Add vertical offset 8 for bot MB in MBAFF mode
  48.  
  49. ILDB_LABEL(ELSE_Y_2x8T):
  50.         else    (1)             ILDB_LABEL(ENDIF_Y_2x8T)
  51.  
  52.         // Field picture
  53.     (f0.1) mov (1)      MSGDSC  RESP_LEN(1)+DWBRMSGDSC_RC_BF+BI_DEST_UV:ud  // Read 1 GRF from SRC_Y bottom field
  54.     (-f0.1) mov (1)     MSGDSC  RESP_LEN(1)+DWBRMSGDSC_RC_TF+BI_DEST_UV:ud  // Read 1 GRF from SRC_Y top field
  55.  
  56.         asr (1) MSGSRC.1:d              MSGSRC.1:d              1:w                                     // Reduce y by half in field access mode
  57.  
  58.         endif
  59. ILDB_LABEL(ENDIF_Y_2x8T):
  60.  
  61.         // Read 1 GRF from DEST surface as the above MB has been deblocked.
  62. //      send (8) BUF_D(0)<1>    MSGHDRU MSGSRC<8;8,1>:ud        MSGDSC 
  63.         send (8) LEFT_TEMP_D(0)<1>      MSGHDRU MSGSRC<8;8,1>:ud        DAPREAD MSGDSC 
  64.  
  65.  
  66. //      Input from dport for transpose:
  67. //      +-----------------------+-----------------------+-----------------------+-----------------------+
  68. //      |71 71 70 70 61 61 60 60 51 51 50 50 41 41 40 40 31 31 30 30 21 21 20 20 11 11 10 10 01 01 00 00|
  69. //      +-----------------------+-----------------------+-----------------------+-----------------------+
  70. //
  71. //      Output of transpose:    <1>     <=== <16;8,2>:w
  72. //      +-----------------------+-----------------------+-----------------------+-----------------------+
  73. //      |71 71 61 61 51 51 41 41 31 31 21 21 11 11 01 01 70 70 60 60 50 50 40 40 30 30 20 20 10 10 00 00|
  74. //      +-----------------------+-----------------------+-----------------------+-----------------------+
  75. /*
  76.         mov (8) PREV_MB_UW(0,0)<1>              BUF_W(0,0)<16;8,2>              { NoDDClr }
  77.         mov (8) PREV_MB_UW(0,8)<1>              BUF_W(0,1)<16;8,2>              { NoDDChk }
  78. */
  79. // End of load_Left_UV_2x8T.asm
  80.