~gma500/+junk/gma500-natty

« back to all changes in this revision

Viewing changes to libva-0.31.1/i965_drv_video/shaders/mpeg2/vld/field_bidirect.g4a

  • Committer: Luca Forina
  • Date: 2011-02-14 10:01:54 UTC
  • Revision ID: luca.forina@gmail.com-20110214100154-ai9gynuqb1dna2ea
new commit

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright © 2009 Intel Corporation
 
3
 *
 
4
 * Permission is hereby granted, free of charge, to any person obtaining a
 
5
 * copy of this software and associated documentation files (the "Software"),
 
6
 * to deal in the Software without restriction, including without limitation
 
7
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 
8
 * and/or sell copies of the Software, and to permit persons to whom the
 
9
 * Software is furnished to do so, subject to the following conditions:
 
10
 *
 
11
 * The above copyright notice and this permission notice (including the next
 
12
 * paragraph) shall be included in all copies or substantial portions of the
 
13
 * Software.
 
14
 *
 
15
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 
16
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
17
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 
18
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 
19
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 
20
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 
21
 * SOFTWARE.
 
22
 *
 
23
 * Author:
 
24
 *    Zou Nan hai <nanhai.zou@intel.com>
 
25
 *    Yan Li <li.l.yan@intel.com>
 
26
 *    Liu Xi bin<xibin.liu@intel.com>
 
27
 */
 
28
/* GRF allocation:
 
29
   g1~g30: constant buffer
 
30
           g1~g2:intra IQ matrix
 
31
           g3~g4:non intra IQ matrix
 
32
           g5~g20:IDCT table
 
33
   g31:    thread payload 
 
34
   g58~g81:reference data
 
35
   g82:    thread payload backup
 
36
   g83~g106:IDCT data
 
37
   g32:   message descriptor for reading reference data   */
 
38
 
 
39
mov (8) g82.0<1>UD g31.0<8,8,1>UD {align1};
 
40
mov (2) g31.0<1>UD g82.12<2,2,1>UW {align1};
 
41
mov (1) g126.8<1>UD ip {align1};
 
42
mov (1) ip g21.0<1,1,1>UD {align1};
 
43
 
 
44
//Y of forward 
 
45
asr (2) g31.14<1>W g82.16<2,2,1>W 1W {align1};
 
46
add (2) g32.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1};
 
47
mov (1) g32.28<1>UD 0UD {align1};
 
48
and.nz (1) null g82.2<1,1,1>UW 0x1000UW {align1};             //motion vertical field select
 
49
(f0) mov (1) g32.28<1>UD 1UD {align1};
 
50
shl (1) g32.4<1>UD g32.4<1,1,1>UD 1UD {align1};
 
51
add (1) g32.4<1>UD g32.4<1,1,1>UD g32.28<1,1,1>UD {align1};
 
52
define(`surface',`4')
 
53
define(`mv1',`g82.16')
 
54
define(`mv2',`g82.18')
 
55
include(`field_motion_y.g4i')
 
56
mov (16) g108.0<1>UD g58.0<16,16,1>UD {align1 compr};
 
57
mov (16) g110.0<1>UD g60.0<16,16,1>UD {align1 compr};
 
58
mov (16) g112.0<1>UD g62.0<16,16,1>UD {align1 compr};
 
59
mov (16) g114.0<1>UD g64.0<16,16,1>UD {align1 compr};
 
60
mov (16) g116.0<1>UD g66.0<16,16,1>UD {align1 compr};
 
61
mov (16) g118.0<1>UD g68.0<16,16,1>UD {align1 compr};
 
62
mov (16) g120.0<1>UD g70.0<16,16,1>UD {align1 compr};
 
63
mov (16) g122.0<1>UD g72.0<16,16,1>UD {align1 compr};
 
64
 
 
65
//Y of backward 
 
66
asr (2) g31.14<1>W g82.20<2,2,1>W 1W {align1};
 
67
add (2) g32.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1};
 
68
mov (1) g32.28<1>UD 0UD {align1};
 
69
and.nz (1) null g82.2<1,1,1>UW 0x2000UW {align1};             //motion vertical field select
 
70
(f0) mov (1) g32.28<1>UD 1UD {align1};
 
71
shl (1) g32.4<1>UD g32.4<1,1,1>UD 1UD {align1};
 
72
add (1) g32.4<1>UD g32.4<1,1,1>UD g32.28<1,1,1>UD {align1};
 
73
define(`surface',`7')
 
74
define(`mv1',`g82.20')
 
75
define(`mv2',`g82.22')
 
76
include(`field_motion_y.g4i')
 
77
avg (16) g58.0<1>UW g58.0<16,16,1>UW g108.0<16,16,1>UW {align1};
 
78
avg (16) g59.0<1>UW g59.0<16,16,1>UW g109.0<16,16,1>UW {align1};
 
79
avg (16) g60.0<1>UW g60.0<16,16,1>UW g110.0<16,16,1>UW {align1};
 
80
avg (16) g61.0<1>UW g61.0<16,16,1>UW g111.0<16,16,1>UW {align1};
 
81
avg (16) g62.0<1>UW g62.0<16,16,1>UW g112.0<16,16,1>UW {align1};
 
82
avg (16) g63.0<1>UW g63.0<16,16,1>UW g113.0<16,16,1>UW {align1};
 
83
avg (16) g64.0<1>UW g64.0<16,16,1>UW g114.0<16,16,1>UW {align1};
 
84
avg (16) g65.0<1>UW g65.0<16,16,1>UW g115.0<16,16,1>UW {align1};
 
85
avg (16) g66.0<1>UW g66.0<16,16,1>UW g116.0<16,16,1>UW {align1};
 
86
avg (16) g67.0<1>UW g67.0<16,16,1>UW g117.0<16,16,1>UW {align1};
 
87
avg (16) g68.0<1>UW g68.0<16,16,1>UW g118.0<16,16,1>UW {align1};
 
88
avg (16) g69.0<1>UW g69.0<16,16,1>UW g119.0<16,16,1>UW {align1};
 
89
avg (16) g70.0<1>UW g70.0<16,16,1>UW g120.0<16,16,1>UW {align1};
 
90
avg (16) g71.0<1>UW g71.0<16,16,1>UW g121.0<16,16,1>UW {align1};
 
91
avg (16) g72.0<1>UW g72.0<16,16,1>UW g122.0<16,16,1>UW {align1};
 
92
avg (16) g73.0<1>UW g73.0<16,16,1>UW g123.0<16,16,1>UW {align1};
 
93
 
 
94
//UV, Forward
 
95
shr (2) g31.0<1>UD g31.0<2,2,1>UD 1UD {align1};
 
96
asr (2) g31.14<1>W g82.16<2,2,1>W 2W {align1};
 
97
add (2) g32.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1};
 
98
mov (1) g32.28<1>UD 0UD {align1};
 
99
and.nz (1) null g82.2<1,1,1>UW 0x1000UW {align1};             //motion vertical field select
 
100
(f0) mov (1) g32.28<1>UD 1UD {align1};
 
101
shl (1) g32.4<1>UD g32.4<1,1,1>UD 1UD {align1};
 
102
add (1) g32.4<1>UD g32.4<1,1,1>UD g32.28<1,1,1>UD {align1};
 
103
define(`surface_u', `5')
 
104
define(`surface_v', `6')
 
105
define(`mv1',`g82.16')
 
106
define(`mv2',`g82.18')
 
107
include(`field_motion_uv.g4i')
 
108
//Save UV Forward
 
109
mov (16) g108.0<1>UD g74.0<16,16,1>UD {align1 compr};
 
110
mov (16) g110.0<1>UD g76.0<16,16,1>UD {align1 compr};
 
111
mov (16) g112.0<1>UD g78.0<16,16,1>UD {align1 compr};
 
112
mov (16) g114.0<1>UD g80.0<16,16,1>UD {align1 compr};
 
113
 
 
114
//UV, Backward
 
115
asr (2) g31.14<1>W g82.20<2,2,1>W 2W {align1};
 
116
add (2) g32.0<1>UD g31.0<2,2,1>UD g31.14<2,2,1>W {align1};
 
117
mov (1) g32.28<1>UD 0UD {align1};
 
118
and.nz (1) null g82.2<1,1,1>UW 0x2000UW {align1};             //motion vertical field select
 
119
(f0) mov (1) g32.28<1>UD 1UD {align1};
 
120
shl (1) g32.4<1>UD g32.4<1,1,1>UD 1UD {align1};
 
121
add (1) g32.4<1>UD g32.4<1,1,1>UD g32.28<1,1,1>UD {align1};
 
122
define(`surface_u', `8')
 
123
define(`surface_v', `9')
 
124
define(`mv1',`g82.20')
 
125
define(`mv2',`g82.22')
 
126
include(`field_motion_uv.g4i')
 
127
//Average Forward and Backward
 
128
avg (16) g74.0<1>UW g74.0<16,16,1>UW g108.0<16,16,1>UW {align1};
 
129
avg (16) g75.0<1>UW g75.0<16,16,1>UW g109.0<16,16,1>UW {align1};
 
130
avg (16) g76.0<1>UW g76.0<16,16,1>UW g110.0<16,16,1>UW {align1};
 
131
avg (16) g77.0<1>UW g77.0<16,16,1>UW g111.0<16,16,1>UW {align1};
 
132
avg (16) g78.0<1>UW g78.0<16,16,1>UW g112.0<16,16,1>UW {align1};
 
133
avg (16) g79.0<1>UW g79.0<16,16,1>UW g113.0<16,16,1>UW {align1};
 
134
avg (16) g80.0<1>UW g80.0<16,16,1>UW g114.0<16,16,1>UW {align1};
 
135
avg (16) g81.0<1>UW g81.0<16,16,1>UW g115.0<16,16,1>UW {align1};
 
136
 
 
137
field_addidct:
 
138
include(`field_addidct.g4i')
 
139
out:
 
140
send (16) 0 acc0<1>UW g0<8,8,1>UW 
 
141
        thread_spawner(0, 0, 0) mlen 1 rlen 0 { align1 EOT};