exa_wm.g4i revision 03b705cf
1/*
2 * Copyright © 2006 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
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21 * IN THE SOFTWARE.
22 *
23 * Authors:
24 *    Wang Zhenyu <zhenyu.z.wang@intel.com>
25 *    Keith Packard <keithp@keithp.com>
26 */
27 
28/*
29 * Input parameters
30 */
31
32/* Destination X/Y */
33define(`dst_x_uw',  `g1.8<2,4,0>UW')
34define(`dst_y_uw',  `g1.10<2,4,0>UW')
35define(`screen_x0', `g1.0<0,1,0>F')
36define(`screen_y0', `g1.4<0,1,0>F')
37
38/* Source transformation parameters */
39define(`src_du_dx', `g3.0<0,1,0>F')
40define(`src_du_dy', `g3.4<0,1,0>F')
41define(`src_uo',    `g3.12<0,1,0>F')
42define(`src_dv_dx', `g3.16<0,1,0>F')
43define(`src_dv_dy', `g3.20<0,1,0>F')
44define(`src_vo',    `g3.28<0,1,0>F')
45define(`src_dw_dx', `g4.0<0,1,0>F')
46define(`src_dw_dy', `g4.4<0,1,0>F')
47define(`src_wo',    `g4.12<0,1,0>F')
48
49define(`mask_du_dx', `g5.0<0,1,0>F')
50define(`mask_du_dy', `g5.4<0,1,0>F')
51define(`mask_uo',    `g5.12<0,1,0>F')
52define(`mask_dv_dx', `g5.16<0,1,0>F')
53define(`mask_dv_dy', `g5.20<0,1,0>F')
54define(`mask_vo',    `g5.28<0,1,0>F')
55define(`mask_dw_dx', `g6.0<0,1,0>F')
56define(`mask_dw_dy', `g6.4<0,1,0>F')
57define(`mask_wo',    `g6.12<0,1,0>F')
58
59/*
60 * Local variables. Pairs must be aligned on even reg boundry
61 */
62
63/* this holds the X dest coordinates */
64define(`dst_x',	    `g8')
65define(`dst_x_0',   `dst_x')
66define(`dst_x_1',   `g9')
67
68/* this holds the Y dest coordinates */
69define(`dst_y',	    `g10')
70define(`dst_y_0',   `dst_y')
71define(`dst_y_1',   `g11')
72
73/* When computing x * dn/dx, use this */
74define(`temp_x',    `g30')
75define(`temp_x_0',  `temp_x')
76define(`temp_x_1',  `g31')
77
78/* When computing y * dn/dy, use this */
79define(`temp_y',    `g28')
80define(`temp_y_0',  temp_y)
81define(`temp_y_1',  `g29')
82
83/* when loading x/y, use these to hold them in UW format */
84define(`temp_x_uw', temp_x)
85define(`temp_y_uw', temp_y)
86
87/* compute source and mask u/v to this pair to send to sampler */
88define(`src_msg',   `m1')
89define(`src_msg_ind',`1')
90define(`src_u',	    `m2')
91define(`src_v',	    `m4')
92define(`src_w',	    `g12')
93define(`src_w_0',   `src_w')
94define(`src_w_1',   `g13')
95
96define(`mask_msg',  `m7')
97define(`mask_msg_ind',`7')
98define(`mask_u',    `m8')
99define(`mask_v',    `m10')
100define(`mask_w',    `src_w')
101define(`mask_w_0',  `src_w_0')
102define(`mask_w_1',  `src_w_1')
103
104/* sample src to these registers */
105define(`src_sample_base',	`g14')
106
107define(`src_sample_r',		`g14')
108define(`src_sample_r_01',	`g14')
109define(`src_sample_r_23',	`g15')
110
111define(`src_sample_g',		`g16')
112define(`src_sample_g_01',	`g16')
113define(`src_sample_g_23',	`g17')
114
115define(`src_sample_b',		`g18')
116define(`src_sample_b_01',	`g18')
117define(`src_sample_b_23',	`g19')
118
119define(`src_sample_a',		`g20')
120define(`src_sample_a_01',	`g20')
121define(`src_sample_a_23',	`g21')
122
123/* sample mask to these registers */
124define(`mask_sample_base',	`g22')
125    
126define(`mask_sample_r',		`g22')
127define(`mask_sample_r_01',	`g22')
128define(`mask_sample_r_23',	`g23')
129    
130define(`mask_sample_g',		`g24')
131define(`mask_sample_g_01',	`g24')
132define(`mask_sample_g_23',	`g25')
133    
134define(`mask_sample_b',		`g26')
135define(`mask_sample_b_01',	`g26')
136define(`mask_sample_b_23',	`g27')
137    
138define(`mask_sample_a',		`g28')
139define(`mask_sample_a_01',	`g28')
140define(`mask_sample_a_23',	`g29')
141
142/* data port SIMD16 send registers */
143
144define(`data_port_msg_0',	`m0')
145define(`data_port_msg_0_ind',	`0')
146define(`data_port_msg_1',	`m1')
147define(`data_port_r_01',	`m2')
148define(`data_port_g_01',	`m3')
149define(`data_port_b_01',	`m4')
150define(`data_port_a_01',	`m5')
151
152define(`data_port_r_23',	`m6')
153define(`data_port_g_23',	`m7')
154define(`data_port_b_23',	`m8')
155define(`data_port_a_23',	`m9')
156
157