2 Copyright (C) The Weather Channel, Inc. 2002. All Rights Reserved.
4 The Weather Channel (TM) funded Tungsten Graphics to develop the
5 initial release of the Radeon 8500 driver under the XFree86 license.
6 This notice must be preserved.
8 Permission is hereby granted, free of charge, to any person obtaining
9 a copy of this software and associated documentation files (the
10 "Software"), to deal in the Software without restriction, including
11 without limitation the rights to use, copy, modify, merge, publish,
12 distribute, sublicense, and/or sell copies of the Software, and to
13 permit persons to whom the Software is furnished to do so, subject to
14 the following conditions:
16 The above copyright notice and this permission notice (including the
17 next paragraph) shall be included in all copies or substantial
18 portions of the Software.
20 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
23 IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
24 LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 **************************************************************************/
33 * \author Keith Whitwell <keith@tungstengraphics.com>
35 * \todo Enable R300 texture tiling code?
38 #include "main/glheader.h"
39 #include "main/imports.h"
40 #include "main/context.h"
41 #include "main/macros.h"
42 #include "main/teximage.h"
43 #include "main/texobj.h"
44 #include "main/enums.h"
45 #include "main/simple_list.h"
47 #include "r600_context.h"
48 #include "radeon_mipmap_tree.h"
50 #include "r700_fragprog.h"
51 #include "r700_vertprog.h"
53 #include "evergreen_tex.h"
55 void r600UpdateTextureState(struct gl_context
* ctx
);
57 void r600UpdateTextureState(struct gl_context
* ctx
)
59 context_t
*context
= R700_CONTEXT(ctx
);
60 R700_CHIP_CONTEXT
*r700
= (R700_CHIP_CONTEXT
*)(&context
->hw
);
61 struct gl_texture_unit
*texUnit
;
62 struct radeon_tex_obj
*t
;
65 R600_STATECHANGE(context
, tx
);
66 R600_STATECHANGE(context
, tx_smplr
);
67 R600_STATECHANGE(context
, tx_brdr_clr
);
69 for (unit
= 0; unit
< R700_MAX_TEXTURE_UNITS
; unit
++) {
70 texUnit
= &ctx
->Texture
.Unit
[unit
];
71 t
= radeon_tex_obj(ctx
->Texture
.Unit
[unit
]._Current
);
72 r700
->textures
[unit
] = NULL
;
73 if (texUnit
->_ReallyEnabled
) {
76 r700
->textures
[unit
] = t
;
81 static GLboolean
r600GetTexFormat(struct gl_texture_object
*tObj
, gl_format mesa_format
)
83 radeonTexObj
*t
= radeon_tex_obj(tObj
);
85 CLEARfield(t
->SQ_TEX_RESOURCE4
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
86 CLEARfield(t
->SQ_TEX_RESOURCE4
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
87 CLEARfield(t
->SQ_TEX_RESOURCE4
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
88 CLEARfield(t
->SQ_TEX_RESOURCE4
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
89 CLEARbit(t
->SQ_TEX_RESOURCE4
, SQ_TEX_RESOURCE_WORD4_0__FORCE_DEGAMMA_bit
);
91 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_FORMAT_COMP_UNSIGNED
,
92 FORMAT_COMP_X_shift
, FORMAT_COMP_X_mask
);
93 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_FORMAT_COMP_UNSIGNED
,
94 FORMAT_COMP_Y_shift
, FORMAT_COMP_Y_mask
);
95 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_FORMAT_COMP_UNSIGNED
,
96 FORMAT_COMP_Z_shift
, FORMAT_COMP_Z_mask
);
97 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_FORMAT_COMP_UNSIGNED
,
98 FORMAT_COMP_W_shift
, FORMAT_COMP_W_mask
);
100 CLEARbit(t
->SQ_TEX_RESOURCE0
, TILE_TYPE_bit
);
101 SETfield(t
->SQ_TEX_RESOURCE0
, ARRAY_LINEAR_GENERAL
,
102 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
103 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
105 switch (mesa_format
) /* This is mesa format. */
107 case MESA_FORMAT_RGBA8888
:
108 case MESA_FORMAT_SIGNED_RGBA8888
:
109 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_8_8_8_8
,
110 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
112 #ifdef MESA_BIG_ENDIAN
113 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
114 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
115 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
116 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
117 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
118 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
119 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_W
,
120 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
122 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_W
,
123 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
124 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
125 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
126 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
127 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
128 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
129 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
131 if (mesa_format
== MESA_FORMAT_SIGNED_RGBA8888
) {
132 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_FORMAT_COMP_SIGNED
,
133 FORMAT_COMP_X_shift
, FORMAT_COMP_X_mask
);
134 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_FORMAT_COMP_SIGNED
,
135 FORMAT_COMP_Y_shift
, FORMAT_COMP_Y_mask
);
136 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_FORMAT_COMP_SIGNED
,
137 FORMAT_COMP_Z_shift
, FORMAT_COMP_Z_mask
);
138 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_FORMAT_COMP_SIGNED
,
139 FORMAT_COMP_W_shift
, FORMAT_COMP_W_mask
);
142 case MESA_FORMAT_RGBA8888_REV
:
143 case MESA_FORMAT_SIGNED_RGBA8888_REV
:
144 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_8_8_8_8
,
145 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
147 #ifdef MESA_BIG_ENDIAN
148 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_W
,
149 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
150 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
151 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
152 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
153 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
154 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
155 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
157 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
158 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
159 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
160 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
161 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
162 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
163 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_W
,
164 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
166 if (mesa_format
== MESA_FORMAT_SIGNED_RGBA8888_REV
) {
167 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_FORMAT_COMP_SIGNED
,
168 FORMAT_COMP_X_shift
, FORMAT_COMP_X_mask
);
169 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_FORMAT_COMP_SIGNED
,
170 FORMAT_COMP_Y_shift
, FORMAT_COMP_Y_mask
);
171 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_FORMAT_COMP_SIGNED
,
172 FORMAT_COMP_Z_shift
, FORMAT_COMP_Z_mask
);
173 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_FORMAT_COMP_SIGNED
,
174 FORMAT_COMP_W_shift
, FORMAT_COMP_W_mask
);
177 case MESA_FORMAT_ARGB8888
:
178 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_8_8_8_8
,
179 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
181 #ifdef MESA_BIG_ENDIAN
182 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
183 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
184 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
185 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
186 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_W
,
187 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
188 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
189 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
191 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
192 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
193 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
194 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
195 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
196 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
197 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_W
,
198 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
201 case MESA_FORMAT_XRGB8888
:
202 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_8_8_8_8
,
203 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
205 #ifdef MESA_BIG_ENDIAN
206 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
207 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
208 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
209 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
210 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_1
,
211 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
212 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
213 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
215 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
216 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
217 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
218 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
219 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
220 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
221 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_1
,
222 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
225 case MESA_FORMAT_XRGB8888_REV
:
226 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_8_8_8_8
,
227 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
229 #ifdef MESA_BIG_ENDIAN
230 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
231 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
232 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
233 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
234 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
235 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
236 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_1
,
237 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
239 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_1
,
240 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
241 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
242 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
243 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
244 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
245 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
246 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
249 case MESA_FORMAT_ARGB8888_REV
:
250 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_8_8_8_8
,
251 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
253 #ifdef MESA_BIG_ENDIAN
254 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
255 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
256 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
257 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
258 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
259 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
260 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_W
,
261 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
263 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
264 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
265 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
266 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
267 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_W
,
268 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
269 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
270 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
273 case MESA_FORMAT_RGB888
:
274 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_8_8_8
,
275 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
277 #ifdef MESA_BIG_ENDIAN
278 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
279 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
280 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
281 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
282 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_1
,
283 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
284 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
285 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
287 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
288 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
289 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
290 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
291 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
292 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
293 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_1
,
294 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
297 case MESA_FORMAT_RGB565
:
298 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_5_6_5
,
299 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
301 #ifdef MESA_BIG_ENDIAN
302 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
303 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
304 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
305 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
306 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
307 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
308 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_1
,
309 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
311 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
312 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
313 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
314 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
315 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
316 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
317 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_1
,
318 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
322 case MESA_FORMAT_RGB565_REV
:
323 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_5_6_5
,
324 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
326 #ifdef MESA_BIG_ENDIAN
327 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
328 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
329 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
330 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
331 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
332 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
333 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_1
,
334 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
336 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
337 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
338 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
339 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
340 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
341 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
342 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_1
,
343 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
346 case MESA_FORMAT_ARGB4444
:
347 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_4_4_4_4
,
348 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
350 #ifdef MESA_BIG_ENDIAN
351 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
352 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
353 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
354 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
355 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_W
,
356 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
357 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
358 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
360 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
361 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
362 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
363 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
364 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
365 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
366 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_W
,
367 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
370 case MESA_FORMAT_ARGB4444_REV
:
371 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_4_4_4_4
,
372 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
373 #ifdef MESA_BIG_ENDIAN
374 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
375 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
376 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
377 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
378 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
379 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
380 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_W
,
381 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
383 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
384 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
385 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
386 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
387 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_W
,
388 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
389 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
390 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
393 case MESA_FORMAT_ARGB1555
:
394 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_1_5_5_5
,
395 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
396 #ifdef MESA_BIG_ENDIAN
397 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
398 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
399 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
400 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
401 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_W
,
402 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
403 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
404 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
406 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
407 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
408 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
409 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
410 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
411 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
412 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_W
,
413 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
416 case MESA_FORMAT_ARGB1555_REV
:
417 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_1_5_5_5
,
418 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
419 #ifdef MESA_BIG_ENDIAN
420 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
421 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
422 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
423 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
424 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
425 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
426 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_W
,
427 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
429 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
430 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
431 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
432 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
433 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_W
,
434 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
435 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
436 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
439 case MESA_FORMAT_AL88
:
440 case MESA_FORMAT_AL88_REV
: /* TODO : Check this. */
441 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_8_8
,
442 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
444 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
445 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
446 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
447 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
448 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
449 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
450 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
451 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
453 case MESA_FORMAT_RGB332
:
454 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_3_3_2
,
455 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
457 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
458 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
459 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
460 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
461 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
462 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
463 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_1
,
464 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
466 case MESA_FORMAT_A8
: /* ZERO, ZERO, ZERO, X */
467 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_8
,
468 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
470 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_0
,
471 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
472 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_0
,
473 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
474 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_0
,
475 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
476 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
477 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
479 case MESA_FORMAT_L8
: /* X, X, X, ONE */
480 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_8
,
481 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
483 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
484 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
485 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
486 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
487 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
488 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
489 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_1
,
490 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
492 case MESA_FORMAT_I8
: /* X, X, X, X */
493 case MESA_FORMAT_CI8
:
494 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_8
,
495 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
497 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
498 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
499 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
500 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
501 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
502 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
503 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
504 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
506 /* YUV422 TODO conversion */ /* X, Y, Z, ONE, G8R8_G8B8 */
508 case MESA_FORMAT_YCBCR:
509 t->SQ_TEX_RESOURCE1.bitfields.DATA_FORMAT = ;
512 /* VUY422 TODO conversion */ /* X, Y, Z, ONE, G8R8_G8B8 */
514 case MESA_FORMAT_YCBCR_REV:
515 t->SQ_TEX_RESOURCE1.bitfields.DATA_FORMAT = ;
518 case MESA_FORMAT_RGB_DXT1
: /* not supported yet */
519 case MESA_FORMAT_RGBA_DXT1
: /* not supported yet */
520 case MESA_FORMAT_RGBA_DXT3
: /* not supported yet */
521 case MESA_FORMAT_RGBA_DXT5
: /* not supported yet */
524 case MESA_FORMAT_RGBA_FLOAT32
:
525 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_32_32_32_32_FLOAT
,
526 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
528 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
529 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
530 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
531 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
532 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
533 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
534 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_W
,
535 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
537 case MESA_FORMAT_RGBA_FLOAT16
:
538 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_16_16_16_16_FLOAT
,
539 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
541 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
542 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
543 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
544 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
545 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
546 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
547 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_W
,
548 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
550 case MESA_FORMAT_RGB_FLOAT32
: /* X, Y, Z, ONE */
551 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_32_32_32_FLOAT
,
552 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
554 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
555 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
556 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
557 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
558 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
559 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
560 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_1
,
561 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
563 case MESA_FORMAT_RGB_FLOAT16
:
564 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_16_16_16_FLOAT
,
565 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
567 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
568 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
569 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
570 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
571 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
572 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
573 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_1
,
574 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
576 case MESA_FORMAT_ALPHA_FLOAT32
: /* ZERO, ZERO, ZERO, X */
577 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_32_FLOAT
,
578 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
580 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_0
,
581 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
582 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_0
,
583 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
584 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_0
,
585 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
586 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
587 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
589 case MESA_FORMAT_ALPHA_FLOAT16
: /* ZERO, ZERO, ZERO, X */
590 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_16_FLOAT
,
591 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
593 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_0
,
594 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
595 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_0
,
596 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
597 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_0
,
598 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
599 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
600 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
602 case MESA_FORMAT_LUMINANCE_FLOAT32
: /* X, X, X, ONE */
603 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_32_FLOAT
,
604 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
606 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
607 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
608 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
609 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
610 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
611 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
612 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_1
,
613 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
615 case MESA_FORMAT_LUMINANCE_FLOAT16
: /* X, X, X, ONE */
616 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_16_FLOAT
,
617 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
619 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
620 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
621 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
622 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
623 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
624 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
625 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_1
,
626 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
628 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32
:
629 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_32_32_FLOAT
,
630 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
632 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
633 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
634 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
635 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
636 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
637 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
638 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
639 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
641 case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16
:
642 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_16_16_FLOAT
,
643 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
645 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
646 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
647 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
648 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
649 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
650 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
651 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
652 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
654 case MESA_FORMAT_INTENSITY_FLOAT32
: /* X, X, X, X */
655 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_32_FLOAT
,
656 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
658 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
659 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
660 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
661 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
662 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
663 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
664 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
665 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
667 case MESA_FORMAT_INTENSITY_FLOAT16
: /* X, X, X, X */
668 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_16_FLOAT
,
669 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
671 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
672 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
673 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
674 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
675 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
676 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
677 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
678 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
680 case MESA_FORMAT_Z16
:
681 case MESA_FORMAT_X8_Z24
:
682 case MESA_FORMAT_S8_Z24
:
683 case MESA_FORMAT_Z24_S8
:
684 case MESA_FORMAT_Z32
:
686 SETbit(t
->SQ_TEX_RESOURCE0
, TILE_TYPE_bit
);
687 SETfield(t
->SQ_TEX_RESOURCE0
, ARRAY_1D_TILED_THIN1
,
688 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_shift
,
689 SQ_TEX_RESOURCE_WORD0_0__TILE_MODE_mask
);
690 switch (mesa_format
) {
691 case MESA_FORMAT_Z16
:
692 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_16
,
693 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
695 case MESA_FORMAT_X8_Z24
:
696 case MESA_FORMAT_S8_Z24
:
697 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_8_24
,
698 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
700 case MESA_FORMAT_Z24_S8
:
701 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_24_8
,
702 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
704 case MESA_FORMAT_Z32
:
705 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_32
,
706 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
709 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_8
,
710 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
715 switch (tObj
->Sampler
.DepthMode
) {
716 case GL_LUMINANCE
: /* X, X, X, ONE */
717 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
718 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
719 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
720 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
721 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
722 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
723 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_1
,
724 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
726 case GL_INTENSITY
: /* X, X, X, X */
727 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
728 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
729 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
730 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
731 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
732 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
733 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
734 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
736 case GL_ALPHA
: /* ZERO, ZERO, ZERO, X */
737 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_0
,
738 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
739 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_0
,
740 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
741 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_0
,
742 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
743 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
744 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
750 /* EXT_texture_sRGB */
751 case MESA_FORMAT_SARGB8
:
752 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_8_8_8_8
,
753 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
755 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
756 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
757 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
758 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
759 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
760 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
761 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_W
,
762 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
763 SETbit(t
->SQ_TEX_RESOURCE4
, SQ_TEX_RESOURCE_WORD4_0__FORCE_DEGAMMA_bit
);
765 case MESA_FORMAT_SLA8
:
766 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_8_8
,
767 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
769 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
770 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
771 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
772 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
773 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
774 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
775 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
776 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
777 SETbit(t
->SQ_TEX_RESOURCE4
, SQ_TEX_RESOURCE_WORD4_0__FORCE_DEGAMMA_bit
);
779 case MESA_FORMAT_SL8
: /* X, X, X, ONE */
780 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_8
,
781 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
783 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
784 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
785 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
786 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
787 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
788 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
789 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_1
,
790 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
791 SETbit(t
->SQ_TEX_RESOURCE4
, SQ_TEX_RESOURCE_WORD4_0__FORCE_DEGAMMA_bit
);
794 /* Not supported format */
801 static GLuint
r600_translate_shadow_func(GLenum func
)
805 return SQ_TEX_DEPTH_COMPARE_NEVER
;
807 return SQ_TEX_DEPTH_COMPARE_LESS
;
809 return SQ_TEX_DEPTH_COMPARE_LESSEQUAL
;
811 return SQ_TEX_DEPTH_COMPARE_GREATER
;
813 return SQ_TEX_DEPTH_COMPARE_GREATEREQUAL
;
815 return SQ_TEX_DEPTH_COMPARE_NOTEQUAL
;
817 return SQ_TEX_DEPTH_COMPARE_EQUAL
;
819 return SQ_TEX_DEPTH_COMPARE_ALWAYS
;
821 WARN_ONCE("Unknown shadow compare function! %d", func
);
826 static INLINE
uint32_t
827 S_FIXED(float value
, uint32_t frac_bits
)
829 return value
* (1 << frac_bits
);
832 void r600SetDepthTexMode(struct gl_texture_object
*tObj
)
839 t
= radeon_tex_obj(tObj
);
841 if(!r600GetTexFormat(tObj
, tObj
->Image
[0][tObj
->BaseLevel
]->TexFormat
))
842 t
->validated
= GL_FALSE
;
846 * Compute the cached hardware register values for the given texture object.
848 * \param rmesa Context pointer
849 * \param t the r300 texture object
851 static GLboolean
setup_hardware_state(struct gl_context
* ctx
, struct gl_texture_object
*texObj
, int unit
)
853 context_t
*rmesa
= R700_CONTEXT(ctx
);
854 radeonTexObj
*t
= radeon_tex_obj(texObj
);
855 const struct gl_texture_image
*firstImage
;
856 GLuint uTexelPitch
, row_align
;
858 if (rmesa
->radeon
.radeonScreen
->driScreen
->dri2
.enabled
&&
863 firstImage
= t
->base
.Image
[0][t
->minLod
];
865 if (!t
->image_override
) {
866 if (!r600GetTexFormat(texObj
, firstImage
->TexFormat
)) {
867 radeon_warning("unsupported texture format in %s\n",
873 switch (texObj
->Target
) {
875 SETfield(t
->SQ_TEX_RESOURCE0
, SQ_TEX_DIM_1D
, DIM_shift
, DIM_mask
);
876 SETfield(t
->SQ_TEX_RESOURCE1
, 0, TEX_DEPTH_shift
, TEX_DEPTH_mask
);
879 case GL_TEXTURE_RECTANGLE_NV
:
880 SETfield(t
->SQ_TEX_RESOURCE0
, SQ_TEX_DIM_2D
, DIM_shift
, DIM_mask
);
881 SETfield(t
->SQ_TEX_RESOURCE1
, 0, TEX_DEPTH_shift
, TEX_DEPTH_mask
);
884 SETfield(t
->SQ_TEX_RESOURCE0
, SQ_TEX_DIM_3D
, DIM_shift
, DIM_mask
);
885 SETfield(t
->SQ_TEX_RESOURCE1
, firstImage
->Depth
- 1, // ???
886 TEX_DEPTH_shift
, TEX_DEPTH_mask
);
888 case GL_TEXTURE_CUBE_MAP
:
889 SETfield(t
->SQ_TEX_RESOURCE0
, SQ_TEX_DIM_CUBEMAP
, DIM_shift
, DIM_mask
);
890 SETfield(t
->SQ_TEX_RESOURCE1
, 0, TEX_DEPTH_shift
, TEX_DEPTH_mask
);
893 radeon_error("unexpected texture target type in %s\n", __FUNCTION__
);
897 row_align
= rmesa
->radeon
.texture_row_align
- 1;
898 uTexelPitch
= (_mesa_format_row_stride(firstImage
->TexFormat
, firstImage
->Width
) + row_align
) & ~row_align
;
899 uTexelPitch
= uTexelPitch
/ _mesa_get_format_bytes(firstImage
->TexFormat
);
900 uTexelPitch
= (uTexelPitch
+ R700_TEXEL_PITCH_ALIGNMENT_MASK
)
901 & ~R700_TEXEL_PITCH_ALIGNMENT_MASK
;
907 SETfield(t
->SQ_TEX_RESOURCE0
, (uTexelPitch
/8)-1, PITCH_shift
, PITCH_mask
);
908 SETfield(t
->SQ_TEX_RESOURCE0
, firstImage
->Width
- 1,
909 TEX_WIDTH_shift
, TEX_WIDTH_mask
);
910 SETfield(t
->SQ_TEX_RESOURCE1
, firstImage
->Height
- 1,
911 TEX_HEIGHT_shift
, TEX_HEIGHT_mask
);
913 t
->SQ_TEX_RESOURCE2
= get_base_teximage_offset(t
) / 256;
915 t
->SQ_TEX_RESOURCE3
= radeon_miptree_image_offset(t
->mt
, 0, t
->minLod
+ 1) / 256;
917 SETfield(t
->SQ_TEX_RESOURCE4
, 0, BASE_LEVEL_shift
, BASE_LEVEL_mask
);
918 SETfield(t
->SQ_TEX_RESOURCE5
, t
->maxLod
- t
->minLod
, LAST_LEVEL_shift
, LAST_LEVEL_mask
);
920 SETfield(t
->SQ_TEX_SAMPLER1
,
921 S_FIXED(CLAMP(t
->base
.Sampler
.MinLod
- t
->minLod
, 0, 15), 6),
922 MIN_LOD_shift
, MIN_LOD_mask
);
923 SETfield(t
->SQ_TEX_SAMPLER1
,
924 S_FIXED(CLAMP(t
->base
.Sampler
.MaxLod
- t
->minLod
, 0, 15), 6),
925 MAX_LOD_shift
, MAX_LOD_mask
);
926 SETfield(t
->SQ_TEX_SAMPLER1
,
927 S_FIXED(CLAMP(ctx
->Texture
.Unit
[unit
].LodBias
+ t
->base
.Sampler
.LodBias
, -16, 16), 6),
928 SQ_TEX_SAMPLER_WORD1_0__LOD_BIAS_shift
, SQ_TEX_SAMPLER_WORD1_0__LOD_BIAS_mask
);
930 if(texObj
->Sampler
.CompareMode
== GL_COMPARE_R_TO_TEXTURE_ARB
)
932 SETfield(t
->SQ_TEX_SAMPLER0
, r600_translate_shadow_func(texObj
->Sampler
.CompareFunc
), DEPTH_COMPARE_FUNCTION_shift
, DEPTH_COMPARE_FUNCTION_mask
);
936 CLEARfield(t
->SQ_TEX_SAMPLER0
, DEPTH_COMPARE_FUNCTION_mask
);
943 * Ensure the given texture is ready for rendering.
945 * Mostly this means populating the texture object's mipmap tree.
947 static GLboolean
r600_validate_texture(struct gl_context
* ctx
, struct gl_texture_object
*texObj
, int unit
)
949 radeonTexObj
*t
= radeon_tex_obj(texObj
);
951 if (!radeon_validate_texture_miptree(ctx
, texObj
))
954 /* Configure the hardware registers (more precisely, the cached version
955 * of the hardware registers). */
956 if (!setup_hardware_state(ctx
, texObj
, unit
))
959 t
->validated
= GL_TRUE
;
964 * Ensure all enabled and complete textures are uploaded along with any buffers being used.
966 GLboolean
r600ValidateBuffers(struct gl_context
* ctx
)
968 context_t
*rmesa
= R700_CONTEXT(ctx
);
969 struct radeon_renderbuffer
*rrb
;
970 struct radeon_bo
*pbo
;
974 radeon_cs_space_reset_bos(rmesa
->radeon
.cmdbuf
.cs
);
976 rrb
= radeon_get_colorbuffer(&rmesa
->radeon
);
978 if (rrb
&& rrb
->bo
) {
979 radeon_cs_space_add_persistent_bo(rmesa
->radeon
.cmdbuf
.cs
,
981 RADEON_GEM_DOMAIN_VRAM
);
985 rrb
= radeon_get_depthbuffer(&rmesa
->radeon
);
986 if (rrb
&& rrb
->bo
) {
987 radeon_cs_space_add_persistent_bo(rmesa
->radeon
.cmdbuf
.cs
,
989 RADEON_GEM_DOMAIN_VRAM
);
992 for (i
= 0; i
< ctx
->Const
.MaxTextureImageUnits
; ++i
) {
995 if (!ctx
->Texture
.Unit
[i
]._ReallyEnabled
)
998 if (!r600_validate_texture(ctx
, ctx
->Texture
.Unit
[i
]._Current
, i
)) {
999 radeon_warning("failed to validate texture for unit %d.\n", i
);
1001 t
= radeon_tex_obj(ctx
->Texture
.Unit
[i
]._Current
);
1002 if (t
->image_override
&& t
->bo
)
1003 radeon_cs_space_add_persistent_bo(rmesa
->radeon
.cmdbuf
.cs
,
1005 RADEON_GEM_DOMAIN_GTT
| RADEON_GEM_DOMAIN_VRAM
, 0);
1007 radeon_cs_space_add_persistent_bo(rmesa
->radeon
.cmdbuf
.cs
,
1009 RADEON_GEM_DOMAIN_GTT
| RADEON_GEM_DOMAIN_VRAM
, 0);
1012 pbo
= (struct radeon_bo
*)r700GetActiveFpShaderBo(ctx
);
1014 radeon_cs_space_add_persistent_bo(rmesa
->radeon
.cmdbuf
.cs
, pbo
,
1015 RADEON_GEM_DOMAIN_GTT
, 0);
1018 pbo
= (struct radeon_bo
*)r700GetActiveVpShaderBo(ctx
);
1020 radeon_cs_space_add_persistent_bo(rmesa
->radeon
.cmdbuf
.cs
, pbo
,
1021 RADEON_GEM_DOMAIN_GTT
, 0);
1024 pbo
= (struct radeon_bo
*)r700GetActiveFpShaderConstBo(ctx
);
1026 radeon_cs_space_add_persistent_bo(rmesa
->radeon
.cmdbuf
.cs
, pbo
,
1027 RADEON_GEM_DOMAIN_GTT
, 0);
1030 pbo
= (struct radeon_bo
*)r700GetActiveVpShaderConstBo(ctx
);
1032 radeon_cs_space_add_persistent_bo(rmesa
->radeon
.cmdbuf
.cs
, pbo
,
1033 RADEON_GEM_DOMAIN_GTT
, 0);
1036 ret
= radeon_cs_space_check_with_bo(rmesa
->radeon
.cmdbuf
.cs
, first_elem(&rmesa
->radeon
.dma
.reserved
)->bo
, RADEON_GEM_DOMAIN_GTT
, 0);
1042 void r600SetTexOffset(__DRIcontext
* pDRICtx
, GLint texname
,
1043 unsigned long long offset
, GLint depth
, GLuint pitch
)
1045 context_t
*rmesa
= pDRICtx
->driverPrivate
;
1046 struct gl_texture_object
*tObj
=
1047 _mesa_lookup_texture(rmesa
->radeon
.glCtx
, texname
);
1048 radeonTexObjPtr t
= radeon_tex_obj(tObj
);
1049 const struct gl_texture_image
*firstImage
;
1050 uint32_t pitch_val
, size
, row_align
;
1055 if(rmesa
->radeon
.radeonScreen
->chip_family
>= CHIP_FAMILY_CEDAR
)
1057 evergreenSetTexOffset(pDRICtx
, texname
, offset
, depth
, pitch
);
1061 t
->image_override
= GL_TRUE
;
1066 firstImage
= t
->base
.Image
[0][t
->minLod
];
1067 row_align
= rmesa
->radeon
.texture_row_align
- 1;
1068 size
= ((_mesa_format_row_stride(firstImage
->TexFormat
, firstImage
->Width
) + row_align
) & ~row_align
) * firstImage
->Height
;
1070 radeon_bo_unref(t
->bo
);
1073 t
->bo
= radeon_legacy_bo_alloc_fake(rmesa
->radeon
.radeonScreen
->bom
, size
, offset
);
1074 t
->override_offset
= offset
;
1078 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_8_8_8_8
,
1079 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
1081 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
1082 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1083 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
1084 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1085 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
1086 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1087 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_W
,
1088 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1093 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_8_8_8_8
,
1094 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
1096 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
1097 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1098 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
1099 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1100 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
1101 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1102 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_1
,
1103 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1107 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_5_6_5
,
1108 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
1110 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
1111 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1112 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
1113 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1114 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
1115 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1116 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_1
,
1117 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1122 pitch_val
= (pitch_val
+ R700_TEXEL_PITCH_ALIGNMENT_MASK
)
1123 & ~R700_TEXEL_PITCH_ALIGNMENT_MASK
;
1125 /* min pitch is 8 */
1129 SETfield(t
->SQ_TEX_RESOURCE0
, (pitch_val
/8)-1, PITCH_shift
, PITCH_mask
);
1132 void r600SetTexBuffer2(__DRIcontext
*pDRICtx
, GLint target
, GLint glx_texture_format
, __DRIdrawable
*dPriv
)
1134 struct gl_texture_unit
*texUnit
;
1135 struct gl_texture_object
*texObj
;
1136 struct gl_texture_image
*texImage
;
1137 struct radeon_renderbuffer
*rb
;
1138 radeon_texture_image
*rImage
;
1139 radeonContextPtr radeon
;
1141 struct radeon_framebuffer
*rfb
;
1144 gl_format texFormat
;
1146 radeon
= pDRICtx
->driverPrivate
;
1147 rmesa
= pDRICtx
->driverPrivate
;
1149 if(rmesa
->radeon
.radeonScreen
->chip_family
>= CHIP_FAMILY_CEDAR
)
1151 evergreenSetTexBuffer(pDRICtx
, target
, glx_texture_format
, dPriv
);
1155 rfb
= dPriv
->driverPrivate
;
1156 texUnit
= &radeon
->glCtx
->Texture
.Unit
[radeon
->glCtx
->Texture
.CurrentUnit
];
1157 texObj
= _mesa_select_tex_object(radeon
->glCtx
, texUnit
, target
);
1158 texImage
= _mesa_get_tex_image(radeon
->glCtx
, texObj
, target
, 0);
1160 rImage
= get_radeon_texture_image(texImage
);
1161 t
= radeon_tex_obj(texObj
);
1166 radeon_update_renderbuffers(pDRICtx
, dPriv
, GL_TRUE
);
1167 rb
= rfb
->color_rb
[0];
1168 if (rb
->bo
== NULL
) {
1169 /* Failed to BO for the buffer */
1173 _mesa_lock_texture(radeon
->glCtx
, texObj
);
1175 radeon_bo_unref(t
->bo
);
1179 radeon_bo_unref(rImage
->bo
);
1183 radeon_miptree_unreference(&t
->mt
);
1184 radeon_miptree_unreference(&rImage
->mt
);
1186 rImage
->bo
= rb
->bo
;
1187 radeon_bo_ref(rImage
->bo
);
1189 radeon_bo_ref(t
->bo
);
1190 t
->image_override
= GL_TRUE
;
1191 t
->override_offset
= 0;
1192 pitch_val
= rb
->pitch
;
1195 if (glx_texture_format
== __DRI_TEXTURE_FORMAT_RGB
) {
1196 texFormat
= MESA_FORMAT_RGB888
;
1197 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_8_8_8_8
,
1198 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
1200 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
1201 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1202 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
1203 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1204 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
1205 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1206 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_1
,
1207 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1209 texFormat
= MESA_FORMAT_ARGB8888
;
1210 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_8_8_8_8
,
1211 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
1213 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
1214 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1215 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
1216 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1217 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
1218 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1219 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_W
,
1220 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1227 texFormat
= MESA_FORMAT_RGB888
;
1228 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_8_8_8_8
,
1229 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
1231 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_W
,
1232 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1233 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
1234 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1235 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
1236 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1237 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_1
,
1238 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1242 texFormat
= MESA_FORMAT_RGB565
;
1243 SETfield(t
->SQ_TEX_RESOURCE1
, FMT_5_6_5
,
1244 SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift
, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask
);
1246 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Z
,
1247 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask
);
1248 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_Y
,
1249 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask
);
1250 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_X
,
1251 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask
);
1252 SETfield(t
->SQ_TEX_RESOURCE4
, SQ_SEL_1
,
1253 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift
, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask
);
1258 _mesa_init_teximage_fields(radeon
->glCtx
, target
, texImage
,
1259 rb
->base
.Width
, rb
->base
.Height
, 1, 0,
1260 rb
->cpp
, texFormat
);
1261 texImage
->RowStride
= rb
->pitch
/ rb
->cpp
;
1263 pitch_val
= (pitch_val
+ R700_TEXEL_PITCH_ALIGNMENT_MASK
)
1264 & ~R700_TEXEL_PITCH_ALIGNMENT_MASK
;
1266 /* min pitch is 8 */
1270 SETfield(t
->SQ_TEX_RESOURCE0
, (pitch_val
/8)-1, PITCH_shift
, PITCH_mask
);
1271 SETfield(t
->SQ_TEX_RESOURCE0
, rb
->base
.Width
- 1,
1272 TEX_WIDTH_shift
, TEX_WIDTH_mask
);
1273 SETfield(t
->SQ_TEX_RESOURCE1
, rb
->base
.Height
- 1,
1274 TEX_HEIGHT_shift
, TEX_HEIGHT_mask
);
1276 t
->validated
= GL_TRUE
;
1277 _mesa_unlock_texture(radeon
->glCtx
, texObj
);
1281 void r600SetTexBuffer(__DRIcontext
*pDRICtx
, GLint target
, __DRIdrawable
*dPriv
)
1283 r600SetTexBuffer2(pDRICtx
, target
, __DRI_TEXTURE_FORMAT_RGBA
, dPriv
);