2 * Copyright (c) 2012 Rob Clark <robdclark@gmail.com>
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:
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
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
27 #define PACKED __attribute__((__packed__))
29 #include "util/u_math.h"
30 #include "adreno_common.xml.h"
31 #include "adreno_pm4.xml.h"
74 PRED_SET_RESTOREs
= 34,
114 PRED_SETE_PUSHv
= 20,
115 PRED_SETNE_PUSHv
= 21,
116 PRED_SETGT_PUSHv
= 22,
117 PRED_SETGTE_PUSHv
= 23,
125 } instr_vector_opc_t
;
127 typedef struct PACKED
{
129 uint8_t vector_dest
: 6;
130 uint8_t vector_dest_rel
: 1;
131 uint8_t low_precision_16b_fp
: 1;
132 uint8_t scalar_dest
: 6;
133 uint8_t scalar_dest_rel
: 1;
134 uint8_t export_data
: 1;
135 uint8_t vector_write_mask
: 4;
136 uint8_t scalar_write_mask
: 4;
137 uint8_t vector_clamp
: 1;
138 uint8_t scalar_clamp
: 1;
139 instr_scalar_opc_t scalar_opc
: 6;
141 uint8_t src3_swiz
: 8;
142 uint8_t src2_swiz
: 8;
143 uint8_t src1_swiz
: 8;
144 uint8_t src3_reg_negate
: 1;
145 uint8_t src2_reg_negate
: 1;
146 uint8_t src1_reg_negate
: 1;
147 uint8_t pred_select
: 2;
148 uint8_t relative_addr
: 1;
149 uint8_t const_1_rel_abs
: 1;
150 uint8_t const_0_rel_abs
: 1;
154 uint8_t src3_reg
: 6;
155 uint8_t src3_reg_select
: 1;
156 uint8_t src3_reg_abs
: 1;
157 uint8_t src2_reg
: 6;
158 uint8_t src2_reg_select
: 1;
159 uint8_t src2_reg_abs
: 1;
160 uint8_t src1_reg
: 6;
161 uint8_t src1_reg_select
: 1;
162 uint8_t src1_reg_abs
: 1;
164 /* constants have full 8-bit index */
166 uint8_t src3_reg_byte
: 8;
167 uint8_t src2_reg_byte
: 8;
168 uint8_t src1_reg_byte
: 8;
171 instr_vector_opc_t vector_opc
: 5;
172 uint8_t src3_sel
: 1;
173 uint8_t src2_sel
: 1;
174 uint8_t src1_sel
: 1;
190 COND_PRED_EXEC_END
= 6,
197 COND_EXEC_PRED_CLEAN
= 13,
198 COND_EXEC_PRED_CLEAN_END
= 14,
199 MARK_VS_FETCH_DONE
= 15,
210 SQ_PARAMETER_PIXEL
= 2,
212 } instr_alloc_type_t
;
214 typedef struct PACKED
{
215 uint16_t address
: 9;
216 uint8_t reserved0
: 3;
219 uint16_t serialize
: 12;
220 uint8_t vc
: 6; /* vertex cache? */
221 uint8_t bool_addr
: 8;
222 uint8_t condition
: 1;
223 instr_addr_mode_t address_mode
: 1;
224 instr_cf_opc_t opc
: 4;
227 typedef struct PACKED
{
228 uint16_t address
: 10;
229 uint8_t reserved0
: 6;
231 uint32_t reserved1
: 22;
232 instr_addr_mode_t address_mode
: 1;
233 instr_cf_opc_t opc
: 4;
236 typedef struct PACKED
{
237 uint16_t address
: 10;
238 uint8_t reserved0
: 3;
239 uint8_t force_call
: 1;
240 uint8_t predicated_jmp
: 1;
241 uint32_t reserved1
: 18;
242 uint8_t direction
: 1;
243 uint8_t bool_addr
: 8;
244 uint8_t condition
: 1;
245 instr_addr_mode_t address_mode
: 1;
246 instr_cf_opc_t opc
: 4;
247 } instr_cf_jmp_call_t
;
249 typedef struct PACKED
{
251 uint64_t reserved0
: 36;
252 uint8_t no_serial
: 1;
253 instr_alloc_type_t buffer_select
: 2;
254 uint8_t alloc_mode
: 1;
255 instr_cf_opc_t opc
: 4;
258 typedef union PACKED
{
259 instr_cf_exec_t exec
;
260 instr_cf_loop_t loop
;
261 instr_cf_jmp_call_t jmp_call
;
262 instr_cf_alloc_t alloc
;
265 instr_cf_opc_t opc
: 4;
272 * FETCH instructions:
278 TEX_GET_BORDER_COLOR_FRAC
= 16,
279 TEX_GET_COMP_TEX_LOD
= 17,
280 TEX_GET_GRADIENTS
= 18,
281 TEX_GET_WEIGHTS
= 19,
282 TEX_SET_TEX_LOD
= 24,
283 TEX_SET_GRADIENTS_H
= 25,
284 TEX_SET_GRADIENTS_V
= 26,
289 TEX_FILTER_POINT
= 0,
290 TEX_FILTER_LINEAR
= 1,
291 TEX_FILTER_BASEMAP
= 2, /* only applicable for mip-filter */
292 TEX_FILTER_USE_FETCH_CONST
= 3,
293 } instr_tex_filter_t
;
296 ANISO_FILTER_DISABLED
= 0,
297 ANISO_FILTER_MAX_1_1
= 1,
298 ANISO_FILTER_MAX_2_1
= 2,
299 ANISO_FILTER_MAX_4_1
= 3,
300 ANISO_FILTER_MAX_8_1
= 4,
301 ANISO_FILTER_MAX_16_1
= 5,
302 ANISO_FILTER_USE_FETCH_CONST
= 7,
303 } instr_aniso_filter_t
;
306 ARBITRARY_FILTER_2X4_SYM
= 0,
307 ARBITRARY_FILTER_2X4_ASYM
= 1,
308 ARBITRARY_FILTER_4X2_SYM
= 2,
309 ARBITRARY_FILTER_4X2_ASYM
= 3,
310 ARBITRARY_FILTER_4X4_SYM
= 4,
311 ARBITRARY_FILTER_4X4_ASYM
= 5,
312 ARBITRARY_FILTER_USE_FETCH_CONST
= 7,
313 } instr_arbitrary_filter_t
;
318 } instr_sample_loc_t
;
320 typedef enum a2xx_sq_surfaceformat instr_surf_fmt_t
;
322 typedef struct PACKED
{
324 instr_fetch_opc_t opc
: 5;
326 uint8_t src_reg_am
: 1;
328 uint8_t dst_reg_am
: 1;
329 uint8_t fetch_valid_only
: 1;
330 uint8_t const_idx
: 5;
331 uint8_t tx_coord_denorm
: 1;
332 uint8_t src_swiz
: 6;
334 uint16_t dst_swiz
: 12;
335 instr_tex_filter_t mag_filter
: 2;
336 instr_tex_filter_t min_filter
: 2;
337 instr_tex_filter_t mip_filter
: 2;
338 instr_aniso_filter_t aniso_filter
: 3;
339 instr_arbitrary_filter_t arbitrary_filter
: 3;
340 instr_tex_filter_t vol_mag_filter
: 2;
341 instr_tex_filter_t vol_min_filter
: 2;
342 uint8_t use_comp_lod
: 1;
343 uint8_t use_reg_lod
: 2; /* 0 for cube, 1 for 2d */
344 uint8_t pred_select
: 1;
346 uint8_t use_reg_gradients
: 1;
347 instr_sample_loc_t sample_location
: 1;
348 uint8_t lod_bias
: 7;
350 uint8_t offset_x
: 5;
351 uint8_t offset_y
: 5;
352 uint8_t offset_z
: 5;
353 uint8_t pred_condition
: 1;
356 typedef struct PACKED
{
358 instr_fetch_opc_t opc
: 5;
360 uint8_t src_reg_am
: 1;
362 uint8_t dst_reg_am
: 1;
363 uint8_t must_be_one
: 1;
364 uint8_t const_index
: 5;
365 uint8_t const_index_sel
: 2;
366 uint8_t reserved0
: 3;
367 uint8_t src_swiz
: 2;
369 uint16_t dst_swiz
: 12;
370 uint8_t format_comp_all
: 1; /* '1' for signed, '0' for unsigned? */
371 uint8_t num_format_all
: 1; /* '0' for normalized, '1' for unnormalized */
372 uint8_t signed_rf_mode_all
: 1;
373 uint8_t reserved1
: 1;
374 instr_surf_fmt_t format
: 6;
375 uint8_t reserved2
: 1;
376 uint8_t exp_adjust_all
: 7;
377 uint8_t reserved3
: 1;
378 uint8_t pred_select
: 1;
381 uint32_t offset
: 22;
382 uint8_t reserved4
: 1;
383 uint8_t pred_condition
: 1;
386 typedef union PACKED
{
387 instr_fetch_tex_t tex
;
388 instr_fetch_vtx_t vtx
;
391 instr_fetch_opc_t opc
: 5;
392 uint32_t dummy0
: 27;
394 uint32_t dummy1
: 31;
395 uint8_t pred_select
: 1;
397 uint32_t dummy2
: 31;
398 uint8_t pred_condition
: 1;
402 typedef union PACKED
{
407 #endif /* INSTR_H_ */