summaryrefslogtreecommitdiff
path: root/src/shaders
diff options
context:
space:
mode:
authorZhao Yakui <yakui.zhao@intel.com>2013-01-09 12:29:59 +0800
committerXiang, Haihao <haihao.xiang@intel.com>2013-01-17 13:08:40 +0800
commitb22f42cab19ab629d5b7d0387b782745607dd7be (patch)
treef9cff4ea7a3e52b2c7598190b2f2fc90ee351ecc /src/shaders
parent2f766b59790ff758e480ca4ff99fcdc4a817c775 (diff)
downloadlibva-intel-driver-b22f42cab19ab629d5b7d0387b782745607dd7be.tar.gz
libva-intel-driver-b22f42cab19ab629d5b7d0387b782745607dd7be.tar.bz2
libva-intel-driver-b22f42cab19ab629d5b7d0387b782745607dd7be.zip
Fix the error of reading neighbour macroblock pixels during VME prediction on Snb/Ivy
Otherwise the incorrect result of VME prediction is used. Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
Diffstat (limited to 'src/shaders')
-rw-r--r--src/shaders/vme/inter_frame.asm10
-rw-r--r--src/shaders/vme/inter_frame.g6b9
-rw-r--r--src/shaders/vme/inter_frame.g7b9
-rw-r--r--src/shaders/vme/mpeg2_inter_frame.g7b9
4 files changed, 34 insertions, 3 deletions
diff --git a/src/shaders/vme/inter_frame.asm b/src/shaders/vme/inter_frame.asm
index ce4bd11..e1b6e68 100644
--- a/src/shaders/vme/inter_frame.asm
+++ b/src/shaders/vme/inter_frame.asm
@@ -239,6 +239,7 @@ add (1) vme_m0.0<1>:W vme_m0.0<0,1,0>:W
cmp.e.f0.0 (1) null<1>:uw w_in_mb_uw<0,1,0>:uw orig_x_ub<0,1,0>:ub {align1};
/* (0, y + 1) */
(f0.0)mov (1) orig_x_ub<1>:ub 0:uw {align1} ;
+(f0.0)add (1) orig_y_ub<1>:ub orig_y_ub<0,1,0>:ub 1:uw {align1} ;
(f0.0)mov (1) vme_m0.8<1>:uw 0:uw {align1} ;
(f0.0)add (1) vme_m0.10<1>:uw vme_m0.10<0,1,0>:uw 16:uw {align1} ;
#ifdef DEV_SNB
@@ -246,6 +247,15 @@ cmp.e.f0.0 (1) null<1>:uw w_in_mb_uw<0,1,0>:uw
(f0.0)add (1) vme_m0.2<1>:w vme_m0.2<0,1,0>:w 16:w {align1};
#endif
+shl (2) read0_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */
+add (1) read0_header.0<1>:D read0_header.0<0,1,0>:D -8:W {align1}; /* X offset */
+add (1) read0_header.4<1>:D read0_header.4<0,1,0>:D -1:W {align1}; /* Y offset */
+
+shl (2) read1_header.0<1>:D orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* (x, y) * 16 */
+add (1) read1_header.0<1>:D read1_header.0<0,1,0>:D -4:W {align1}; /* X offset */
+
+shl (2) vme_m0.8<1>:UW orig_xy_ub<2,2,1>:UB 4:UW {align1}; /* Source = (x, y) * 16 */
+
add (1) obw_m0.8<1>:UD obw_m0.8<0,1,0>:UD INTER_VME_OUTPUT_IN_OWS:UW {align1} ;
add.z.f0.1 (1) num_macroblocks<1>:w num_macroblocks<0,1,0>:w -1:w {align1} ;
diff --git a/src/shaders/vme/inter_frame.g6b b/src/shaders/vme/inter_frame.g6b
index ea66788..ca251bb 100644
--- a/src/shaders/vme/inter_frame.g6b
+++ b/src/shaders/vme/inter_frame.g6b
@@ -99,12 +99,19 @@
{ 0x00000040, 0x24403dad, 0x00000440, 0x00100010 },
{ 0x01000010, 0x20004528, 0x000000a2, 0x000000a0 },
{ 0x00010001, 0x20a00171, 0x00000000, 0x00000000 },
+ { 0x00010040, 0x20a12e31, 0x000000a1, 0x00010001 },
{ 0x00010001, 0x24480169, 0x00000000, 0x00000000 },
{ 0x00010040, 0x244a2d29, 0x0000044a, 0x00100010 },
{ 0x00010001, 0x244001ed, 0x00000000, 0xfff0fff0 },
{ 0x00010040, 0x24423dad, 0x00000442, 0x00100010 },
+ { 0x00200009, 0x24002e25, 0x004500a0, 0x00040004 },
+ { 0x00000040, 0x24003ca5, 0x00000400, 0xfff8fff8 },
+ { 0x00000040, 0x24043ca5, 0x00000404, 0xffffffff },
+ { 0x00200009, 0x24202e25, 0x004500a0, 0x00040004 },
+ { 0x00000040, 0x24203ca5, 0x00000420, 0xfffcfffc },
+ { 0x00200009, 0x24482e29, 0x004500a0, 0x00040004 },
{ 0x00000040, 0x24882c21, 0x00000488, 0x000a000a },
{ 0x01000040, 0x20a63dad, 0x020000a6, 0xffffffff },
- { 0x00110020, 0x34001c00, 0x02001400, 0xffffff5e },
+ { 0x00110020, 0x34001c00, 0x02001400, 0xffffff50 },
{ 0x00600001, 0x20000022, 0x008d0000, 0x00000000 },
{ 0x07800031, 0x24001cc8, 0x00000000, 0x82000010 },
diff --git a/src/shaders/vme/inter_frame.g7b b/src/shaders/vme/inter_frame.g7b
index 4601ba8..5273200 100644
--- a/src/shaders/vme/inter_frame.g7b
+++ b/src/shaders/vme/inter_frame.g7b
@@ -89,10 +89,17 @@
{ 0x00000040, 0x24482d29, 0x00000448, 0x00100010 },
{ 0x01000010, 0x20004528, 0x000000a2, 0x000000a0 },
{ 0x00010001, 0x20a00171, 0x00000000, 0x00000000 },
+ { 0x00010040, 0x20a12e31, 0x000000a1, 0x00010001 },
{ 0x00010001, 0x24480169, 0x00000000, 0x00000000 },
{ 0x00010040, 0x244a2d29, 0x0000044a, 0x00100010 },
+ { 0x00200009, 0x24002e25, 0x004500a0, 0x00040004 },
+ { 0x00000040, 0x24003ca5, 0x00000400, 0xfff8fff8 },
+ { 0x00000040, 0x24043ca5, 0x00000404, 0xffffffff },
+ { 0x00200009, 0x24202e25, 0x004500a0, 0x00040004 },
+ { 0x00000040, 0x24203ca5, 0x00000420, 0xfffcfffc },
+ { 0x00200009, 0x24482e29, 0x004500a0, 0x00040004 },
{ 0x00000040, 0x24882c21, 0x00000488, 0x000a000a },
{ 0x01000040, 0x20a63dad, 0x020000a6, 0xffffffff },
- { 0x00110020, 0x34001c00, 0x02001400, 0xffffff74 },
+ { 0x00110020, 0x34001c00, 0x02001400, 0xffffff66 },
{ 0x00600001, 0x28000021, 0x008d0000, 0x00000000 },
{ 0x07800031, 0x24001ca8, 0x00000800, 0x82000010 },
diff --git a/src/shaders/vme/mpeg2_inter_frame.g7b b/src/shaders/vme/mpeg2_inter_frame.g7b
index 398c288..40aeb3f 100644
--- a/src/shaders/vme/mpeg2_inter_frame.g7b
+++ b/src/shaders/vme/mpeg2_inter_frame.g7b
@@ -89,10 +89,17 @@
{ 0x00000040, 0x24482d29, 0x00000448, 0x00100010 },
{ 0x01000010, 0x20004528, 0x000000a2, 0x000000a0 },
{ 0x00010001, 0x20a00171, 0x00000000, 0x00000000 },
+ { 0x00010040, 0x20a12e31, 0x000000a1, 0x00010001 },
{ 0x00010001, 0x24480169, 0x00000000, 0x00000000 },
{ 0x00010040, 0x244a2d29, 0x0000044a, 0x00100010 },
+ { 0x00200009, 0x24002e25, 0x004500a0, 0x00040004 },
+ { 0x00000040, 0x24003ca5, 0x00000400, 0xfff8fff8 },
+ { 0x00000040, 0x24043ca5, 0x00000404, 0xffffffff },
+ { 0x00200009, 0x24202e25, 0x004500a0, 0x00040004 },
+ { 0x00000040, 0x24203ca5, 0x00000420, 0xfffcfffc },
+ { 0x00200009, 0x24482e29, 0x004500a0, 0x00040004 },
{ 0x00000040, 0x24882c21, 0x00000488, 0x000a000a },
{ 0x01000040, 0x20a63dad, 0x020000a6, 0xffffffff },
- { 0x00110020, 0x34001c00, 0x02001400, 0xffffff74 },
+ { 0x00110020, 0x34001c00, 0x02001400, 0xffffff66 },
{ 0x00600001, 0x28000021, 0x008d0000, 0x00000000 },
{ 0x07800031, 0x24001ca8, 0x00000800, 0x82000010 },