Use the output from VME to format MFC_AVC_PAK_OBJEC command for Inter frame
authorXiang, Haihao <haihao.xiang@intel.com>
Thu, 5 Apr 2012 08:38:51 +0000 (16:38 +0800)
committerXiang, Haihao <haihao.xiang@intel.com>
Fri, 6 Apr 2012 08:07:02 +0000 (16:07 +0800)
Signed-off-by: Xiang, Haihao <haihao.xiang@intel.com>
src/shaders/utils/mfc_batchbuffer.inc
src/shaders/utils/mfc_batchbuffer_avc_inter.asm
src/shaders/utils/mfc_batchbuffer_avc_inter.g6b
src/shaders/utils/mfc_batchbuffer_avc_inter.g7b

index eaf3d33..b6a2b3a 100644 (file)
@@ -60,6 +60,8 @@ define(`OB_WRITE_COMMIT_CATEGORY',      `0')    /* category on Ivybridge */
 define(`OB_HEADER_PRESENT',             `1')
 
 define(`INTER_VME_OUTPUT_IN_BYTES',     `160')
+define(`INTER_VME_OUTPUT_IN_OWS',       `10')
+define(`INTER_VME_OUTPUT_MV_IN_OWS',    `8')
 
 define(`MFC_AVC_PAK_OBJECT_INTRA_DW0',  `0x71490009:UD')
 define(`MFC_AVC_PAK_OBJECT_INTRA_DW3',  `0x000e0000:UD')        /* CbpDC (1 << 19 | 1 << 18 | 1 << 17) */
@@ -70,7 +72,7 @@ define(`MFC_AVC_PAK_OBJECT_INTRA_DW6',  `0x04000000:UD')        /* the flag of t
 define(`MFC_AVC_PAK_OBJECT_INTER_DW0',  `MFC_AVC_PAK_OBJECT_INTRA_DW0')
 define(`MFC_AVC_PAK_OBJECT_INTER_DW1',  `0x20:UD')              /* 32 MVs */
 define(`MFC_AVC_PAK_OBJECT_INTER_DW2',  `INTER_VME_OUTPUT_IN_BYTES:UD') /* offset, in bytes */
-define(`MFC_AVC_PAK_OBJECT_INTER_DW3',  `0x014e0120:UD')        /* 
+define(`MFC_AVC_PAK_OBJECT_INTER_DW3',  `0x014e0000:UD')        /* 
                                                                  * (1 << 24) |     PackedMvNum, Debug
                                                                  * (4 << 20) |     8 MV, SNB don't use it
                                                                  * (1 << 19) |     CbpDcY
@@ -151,7 +153,7 @@ define(`tmp_reg7',              `r15')
 define(`tmp_vme_output',        `tmp_reg0')
 define(`tmp_slice_header',      `tmp_reg1')
 define(`tmp_mfc_batchbuffer',   `tmp_reg2')
-
+define(`tmp_offset',            `tmp_reg7')
 /* 
  * GRF 16~23 write back for Oword Block Read message 
  */
@@ -167,7 +169,7 @@ define(`ob_read_wb7',           `r23')
 
 define(`ob_read_wb_len_slice_header',   `1')
 define(`ob_read_wb_len_vme_intra',      `1')
-define(`ob_read_wb_len_vme_inter',      `4')
+define(`ob_read_wb_len_vme_inter',      `2')
 
 #ifdef DEV_SNB
 
index 3aa917d..bc8e154 100644 (file)
  *    Xiang Haihao <haihao.xiang@intel.com>
  */
         
-__PAK_OBJECT:   
+__PAK_OBJECT:
+        mul             (1)     tmp_offset.0<1>:ud              width_in_mb<0,1,0>:uw           mb_y<0,1,0>:ub {align1};
+        add             (1)     tmp_offset.0<1>:ud              tmp_offset.0<0,1,0>:ud          mb_x<0,1,0>:ub {align1};
+        /*
+         * The layout of VME output
+         * ++++++++++++++++++++++++++++++++++++++++++++++
+         * |    MV(128bytes)  |   other info (32bytes)  |
+         * ++++++++++++++++++++++++++++++++++++++++++++++
+         */
+        mul             (1)     tmp_vme_output.8<1>:ud          tmp_offset.0<0,1,0>:ud          INTER_VME_OUTPUT_IN_OWS:ud {align1} ;   /* point to output buffer */
+        add             (1)     tmp_vme_output.8<1>:ud          tmp_vme_output.8<0,1,0>:ud      INTER_VME_OUTPUT_MV_IN_OWS:uw {align1}; /* point to other info */
+        
         mov             (16)    pak_object_ud<1>:ud             0x0:ud {align1} ;
         /* DW0 */
         mov             (1)     pak_object0_ud<1>:ud            MFC_AVC_PAK_OBJECT_INTER_DW0 ;
         /* DW1 */
         mov             (1)     pak_object1_ud<1>:ud            MFC_AVC_PAK_OBJECT_INTER_DW1 ;
         /* DW2 */
-        mul             (1)     pak_object2_ud<1>:ud            width_in_mb<0,1,0>:uw           mb_y<0,1,0>:ub {align1};
-        add             (1)     pak_object2_ud<1>:ud            pak_object2_ud<0,1,0>:ud        mb_x<0,1,0>:ub {align1};
-        mul             (1)     pak_object2_ud<1>:ud            pak_object2_ud<0,1,0>:ud        INTER_VME_OUTPUT_IN_BYTES:ud {align1} ;
-        /* DW3 */
-        mov             (1)     pak_object3_ud<1>:ud            MFC_AVC_PAK_OBJECT_INTER_DW3 ;
+        mul             (1)     pak_object2_ud<1>:ud            tmp_offset.0<0,1,0>:ud          INTER_VME_OUTPUT_IN_BYTES:ud {align1} ;
+        
         /* DW5 */
         mov             (1)     pak_object5_ud<1>:ud            MFC_AVC_PAK_OBJECT_INTRA_DW5 ;
         
         and.z.f0.1      (1)     null<1>:uw                      flags<0,1,0>:uw         FLAG_MASK_LAST_OBJECT {align1};
         
 __PAK_OBJECT_LOOP:
+        mov             (8)     msg_reg0.0<1>:ud                tmp_vme_output<8,8,1>:ud {align1} ;
+        
+send (16)
+        msg_ind
+        ob_read_wb
+        null
+        data_port(
+                OB_CACHE_TYPE,
+                OB_READ,
+                OB_CONTROL_2,
+                BIND_IDX_VME_OUTPUT,
+                OB_WRITE_COMMIT_CATEGORY,
+                OB_HEADER_PRESENT
+        )
+        mlen 1
+        rlen ob_read_wb_len_vme_inter
+        {align1};
+
+        /* DW3 */
+        and             (1)     pak_object3_ud<1>:ud            ob_read_wb0.0<0,1,0>:ud         0xFFFF {align1} ;
+        add             (1)     pak_object3_ud<1>:ud            pak_object3_ud<0,1,0>:ud        MFC_AVC_PAK_OBJECT_INTER_DW3 {align1} ;
+        
         /* DW4 */
         add             (1)     pak_object4_ud<1>:ud            mb_xy<0,1,0>:uw                 MFC_AVC_PAK_OBJECT_INTER_DW4 {align1} ;
         add             (1)     mb_x<1>:ub                      mb_x<0,1,0>:ub                  1:uw {align1};
@@ -56,9 +86,15 @@ __PAK_OBJECT_LOOP:
         (-f0.0)mov      (1)     pak_object6_ud<1>:ud            0x0:ud {align1} ;
         add             (1)     pak_object6_ud<1>:ud            pak_object6_ud<0,1,0>:ud        qp<0,1,0>:ub {align1} ;
 
+        /* DW7 */
+        mov             (1)     pak_object7_ud<1>:ud            ob_read_wb0.4<0,1,0>:ud {align1} ;
+        
         mov             (8)     msg_reg0.0<1>:ud                tmp_mfc_batchbuffer<8,8,1>:ud {align1} ;
         mov             (8)     msg_reg1.0<1>:ud                pak_object_ud<8,8,1>:ud {align1} ;
         mov             (8)     msg_reg2.0<1>:ud                pak_object8_ud<8,8,1>:ud {align1} ;
+
+        /* point to the next other info block */
+        add             (1)     tmp_vme_output.8<1>:ud          tmp_vme_output.8<0,1,0>:ud      INTER_VME_OUTPUT_IN_OWS:ud {align1} ;
         
 send (16)
         msg_ind
index 1e6c807..113d0e5 100644 (file)
    { 0x00000040, 0x21480c21, 0x00000148, 0x00000001 },
    { 0x01000040, 0x20aa3dad, 0x000000aa, 0xffffffff },
    { 0x00110020, 0x34001c00, 0x00001400, 0xffffffee },
+   { 0x00000041, 0x21e04521, 0x000000b4, 0x000000b1 },
+   { 0x00000040, 0x21e04421, 0x000001e0, 0x000000b0 },
+   { 0x00000041, 0x21080c21, 0x000001e0, 0x0000000a },
+   { 0x00000040, 0x21082c21, 0x00000108, 0x00080008 },
    { 0x00800001, 0x23400061, 0x00000000, 0x00000000 },
    { 0x00000001, 0x23400061, 0x00000000, 0x71490009 },
    { 0x00000001, 0x23440061, 0x00000000, 0x00000020 },
-   { 0x00000041, 0x23484521, 0x000000b4, 0x000000b1 },
-   { 0x00000040, 0x23484421, 0x00000348, 0x000000b0 },
-   { 0x00000041, 0x23480c21, 0x00000348, 0x000000a0 },
-   { 0x00000001, 0x234c0061, 0x00000000, 0x014e0120 },
+   { 0x00000041, 0x23480c21, 0x000001e0, 0x000000a0 },
    { 0x00000001, 0x23540061, 0x00000000, 0x000f000f },
    { 0x01000005, 0x20002d28, 0x020000ac, 0x00020002 },
+   { 0x00600001, 0x20000022, 0x008d0100, 0x00000000 },
+   { 0x05800031, 0x22001cc9, 0x00000000, 0x022a0200 },
+   { 0x00000005, 0x234c1c21, 0x00000200, 0x0000ffff },
+   { 0x00000040, 0x234c0c21, 0x0000034c, 0x014e0000 },
    { 0x00000040, 0x23500d21, 0x000000b0, 0xffff0000 },
    { 0x00000040, 0x20b02e31, 0x000000b0, 0x00010001 },
    { 0x01000010, 0x20004528, 0x000000b4, 0x000000b0 },
    { 0x01000010, 0x20002d28, 0x000000ae, 0x00010001 },
    { 0x00110001, 0x23580061, 0x00000000, 0x00000000 },
    { 0x00000040, 0x23584421, 0x00000358, 0x000000b6 },
+   { 0x00000001, 0x235c0021, 0x00000204, 0x00000000 },
    { 0x00600001, 0x20000022, 0x008d0140, 0x00000000 },
    { 0x00600001, 0x20200022, 0x008d0340, 0x00000000 },
    { 0x00600001, 0x20400022, 0x008d0360, 0x00000000 },
+   { 0x00000040, 0x21080c21, 0x00000108, 0x0000000a },
    { 0x05800031, 0x23001cdd, 0x00000000, 0x061b0302 },
    { 0x00000040, 0x21480c21, 0x00000148, 0x00000004 },
    { 0x00000040, 0x23480c21, 0x00000348, 0x000000a0 },
    { 0x01000040, 0x20ae3dad, 0x000000ae, 0xffffffff },
-   { 0x00110020, 0x34001c00, 0x00001400, 0xffffffdc },
+   { 0x00110020, 0x34001c00, 0x00001400, 0xffffffd0 },
    { 0x00010020, 0x34001c00, 0x02001400, 0x0000001e },
    { 0x00600001, 0x20000022, 0x008d0120, 0x00000000 },
    { 0x05800031, 0x22001cc9, 0x00000000, 0x021a0001 },
index 514da20..871e580 100644 (file)
    { 0x00000040, 0x21480c21, 0x00000148, 0x00000001 },
    { 0x01000040, 0x20aa3dad, 0x000000aa, 0xffffffff },
    { 0x00110020, 0x34001c00, 0x00001400, 0xffffffee },
+   { 0x00000041, 0x21e04521, 0x000000b4, 0x000000b1 },
+   { 0x00000040, 0x21e04421, 0x000001e0, 0x000000b0 },
+   { 0x00000041, 0x21080c21, 0x000001e0, 0x0000000a },
+   { 0x00000040, 0x21082c21, 0x00000108, 0x00080008 },
    { 0x00800001, 0x23400061, 0x00000000, 0x00000000 },
    { 0x00000001, 0x23400061, 0x00000000, 0x71490009 },
    { 0x00000001, 0x23440061, 0x00000000, 0x00000020 },
-   { 0x00000041, 0x23484521, 0x000000b4, 0x000000b1 },
-   { 0x00000040, 0x23484421, 0x00000348, 0x000000b0 },
-   { 0x00000041, 0x23480c21, 0x00000348, 0x000000a0 },
-   { 0x00000001, 0x234c0061, 0x00000000, 0x014e0120 },
+   { 0x00000041, 0x23480c21, 0x000001e0, 0x000000a0 },
    { 0x00000001, 0x23540061, 0x00000000, 0x000f000f },
    { 0x01000005, 0x20002d28, 0x020000ac, 0x00020002 },
+   { 0x00600001, 0x28000021, 0x008d0100, 0x00000000 },
+   { 0x0a800031, 0x22001ca9, 0x00000800, 0x02280200 },
+   { 0x00000005, 0x234c1c21, 0x00000200, 0x0000ffff },
+   { 0x00000040, 0x234c0c21, 0x0000034c, 0x014e0000 },
    { 0x00000040, 0x23500d21, 0x000000b0, 0xffff0000 },
    { 0x00000040, 0x20b02e31, 0x000000b0, 0x00010001 },
    { 0x01000010, 0x20004528, 0x000000b4, 0x000000b0 },
    { 0x01000010, 0x20002d28, 0x000000ae, 0x00010001 },
    { 0x00110001, 0x23580061, 0x00000000, 0x00000000 },
    { 0x00000040, 0x23584421, 0x00000358, 0x000000b6 },
+   { 0x00000001, 0x235c0021, 0x00000204, 0x00000000 },
    { 0x00600001, 0x28000021, 0x008d0140, 0x00000000 },
    { 0x00600001, 0x28200021, 0x008d0340, 0x00000000 },
    { 0x00600001, 0x28400021, 0x008d0360, 0x00000000 },
+   { 0x00000040, 0x21080c21, 0x00000108, 0x0000000a },
    { 0x0a800031, 0x20001cac, 0x00000800, 0x060a0302 },
    { 0x00000040, 0x21480c21, 0x00000148, 0x00000004 },
    { 0x00000040, 0x23480c21, 0x00000348, 0x000000a0 },
    { 0x01000040, 0x20ae3dad, 0x000000ae, 0xffffffff },
-   { 0x00110020, 0x34001c00, 0x00001400, 0xffffffdc },
+   { 0x00110020, 0x34001c00, 0x00001400, 0xffffffd0 },
    { 0x00010020, 0x34001c00, 0x02001400, 0x0000001e },
    { 0x00600001, 0x28000021, 0x008d0120, 0x00000000 },
    { 0x0a800031, 0x22001ca9, 0x00000800, 0x02180001 },