1de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse/*
2de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * Copyright 2010 Jerome Glisse <glisse@freedesktop.org>
3de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse *
4de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * Permission is hereby granted, free of charge, to any person obtaining a
5de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * copy of this software and associated documentation files (the "Software"),
6de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * to deal in the Software without restriction, including without limitation
7de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * on the rights to use, copy, modify, merge, publish, distribute, sub
8de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * license, and/or sell copies of the Software, and to permit persons to whom
9de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * the Software is furnished to do so, subject to the following conditions:
10de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse *
11de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * The above copyright notice and this permission notice (including the next
12de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * paragraph) shall be included in all copies or substantial portions of the
13de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * Software.
14de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse *
15de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
18de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
19de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
21de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * USE OR OTHER DEALINGS IN THE SOFTWARE.
22de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse */
23de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse#ifndef R600_ASM_H
24de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse#define R600_ASM_H
25de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse
26555c8d500a4a09445a892316610a428d408318edMarek Olšák#include "r600_pipe.h"
27022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin#include "r600_isa.h"
28fa86fc564aea4e40c89f6fc889e6a5bf817634b3Jerome Glisse
294a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_alu_src {
30de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			sel;
31de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			chan;
32de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			neg;
33de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			abs;
3447d5a19df1e7760c4f5f0e340bfc56355c2e428bDave Airlie	unsigned			rel;
35d649bf51ec787021f7872e2a4c09fb2188c0891bVadim Girlin	unsigned			kc_bank;
367b1c0cbc90d456384b0950ad21faa3c61a6b43ffGlenn Kennard	unsigned			kc_rel;
37a77e813de32643ae2dfffd7ad12abed596172cabHenri Verbeet	uint32_t			value;
38de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse};
39de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse
404a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_alu_dst {
41de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			sel;
42de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			chan;
43de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			clamp;
44de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			write;
4547d5a19df1e7760c4f5f0e340bfc56355c2e428bDave Airlie	unsigned			rel;
46de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse};
47de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse
484a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_alu {
49de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	struct list_head		list;
504a47662beaa2092447939db7880531fb706afeddMarek Olšák	struct r600_bytecode_alu_src		src[3];
514a47662beaa2092447939db7880531fb706afeddMarek Olšák	struct r600_bytecode_alu_dst		dst;
52022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin	unsigned			op;
53de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			last;
54de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			is_op3;
55816bb30245b9e4be78cc24228ada450a425b948dDave Airlie	unsigned			is_lds_idx_op;
56da676eab93e7dad30b574b4eb4cffd4df952e819Vincent Lejeune	unsigned			execute_mask;
57da676eab93e7dad30b574b4eb4cffd4df952e819Vincent Lejeune	unsigned			update_pred;
58da676eab93e7dad30b574b4eb4cffd4df952e819Vincent Lejeune	unsigned			pred_sel;
59e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse	unsigned			bank_swizzle;
60e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse	unsigned			bank_swizzle_force;
61c60cb25bfb15fc83e78d9f2c74646dcc5ad07792Christian König	unsigned			omod;
62c96b9834032952492efbd2d1f5511fe225704918Dave Airlie	unsigned                        index_mode;
63816bb30245b9e4be78cc24228ada450a425b948dDave Airlie	unsigned                        lds_idx;
64de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse};
65de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse
664a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_tex {
6733241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	struct list_head		list;
68022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin	unsigned			op;
6996ed6c90eff58ce030c39c2b4db6daf512586b34Marek Olšák	unsigned			inst_mod;
7033241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			resource_id;
7133241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			src_gpr;
7233241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			src_rel;
7333241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			dst_gpr;
7433241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			dst_rel;
7533241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			dst_sel_x;
7633241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			dst_sel_y;
7733241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			dst_sel_z;
7833241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			dst_sel_w;
7933241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			lod_bias;
8033241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			coord_type_x;
8133241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			coord_type_y;
8233241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			coord_type_z;
8333241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			coord_type_w;
84fa5078c255b5b57514ae854ecd6264379641c924Dave Airlie	int				offset_x;
85fa5078c255b5b57514ae854ecd6264379641c924Dave Airlie	int				offset_y;
86fa5078c255b5b57514ae854ecd6264379641c924Dave Airlie	int				offset_z;
8733241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			sampler_id;
8833241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			src_sel_x;
8933241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			src_sel_y;
9033241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			src_sel_z;
9133241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			src_sel_w;
927b1c0cbc90d456384b0950ad21faa3c61a6b43ffGlenn Kennard	/* indexed samplers/resources only on evergreen/cayman */
937b1c0cbc90d456384b0950ad21faa3c61a6b43ffGlenn Kennard	unsigned			sampler_index_mode;
947b1c0cbc90d456384b0950ad21faa3c61a6b43ffGlenn Kennard	unsigned			resource_index_mode;
9533241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse};
9633241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse
974a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_vtx {
98de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	struct list_head		list;
99022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin	unsigned			op;
100de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			fetch_type;
101de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			buffer_id;
102de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			src_gpr;
103de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			src_sel_x;
104de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			mega_fetch_count;
105de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			dst_gpr;
106de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			dst_sel_x;
107de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			dst_sel_y;
108de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			dst_sel_z;
109de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			dst_sel_w;
110e973221538d5edfad62abedf5b37a4fb774d71fcDave Airlie	unsigned			use_const_fields;
111e973221538d5edfad62abedf5b37a4fb774d71fcDave Airlie	unsigned			data_format;
112e973221538d5edfad62abedf5b37a4fb774d71fcDave Airlie	unsigned			num_format_all;
113e973221538d5edfad62abedf5b37a4fb774d71fcDave Airlie	unsigned			format_comp_all;
114e973221538d5edfad62abedf5b37a4fb774d71fcDave Airlie	unsigned			srf_mode_all;
11596bbc627f369c0100b950f81531b1fe9ef586c34Christian König	unsigned			offset;
116843dfe3206c4f397c7911b748373dde5540392a4Cédric Cano	unsigned			endian;
1177b1c0cbc90d456384b0950ad21faa3c61a6b43ffGlenn Kennard	unsigned			buffer_index_mode;
118de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse};
119de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse
1202b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airliestruct r600_bytecode_gds {
1212b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie	struct list_head		list;
1222b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie	unsigned			op;
1232b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie	unsigned                        gds_op;
1242b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie	unsigned			src_gpr;
1252b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie	unsigned			src_rel;
1262b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie	unsigned			src_sel_x;
1272b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie	unsigned			src_sel_y;
1282b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie	unsigned			src_sel_z;
1292b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie	unsigned			src_gpr2;
1302b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie	unsigned			dst_gpr;
1312b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie	unsigned			dst_rel;
1322b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie	unsigned			dst_sel_x;
1332b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie	unsigned			dst_sel_y;
1342b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie	unsigned			dst_sel_z;
1352b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie	unsigned			dst_sel_w;
1362b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie};
1372b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie
1384a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_output {
139de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			array_base;
140543b2331d7b45a29ccd3530daa2389e87e65d89bMarek Olšák	unsigned			array_size;
141543b2331d7b45a29ccd3530daa2389e87e65d89bMarek Olšák	unsigned			comp_mask;
142de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			type;
1434f7c21899ad449be2bc1157ce1d2d99296a34499Marek Olšák
144022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin	unsigned			op;
1454f7c21899ad449be2bc1157ce1d2d99296a34499Marek Olšák
146de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			elem_size;
147de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			gpr;
148de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			swizzle_x;
149de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			swizzle_y;
150de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			swizzle_z;
151de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			swizzle_w;
1528ca3b140eb53fd8063337a5a2a54a35987d597bcChristian König	unsigned			burst_count;
153ae29a098eaaa9f061cc82a28b8e258e44f03902bDave Airlie	unsigned			index_gpr;
154de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse};
155de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse
1564a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_kcache {
1578273921b7a41251f3f5a87df995913cb291902caHenri Verbeet	unsigned			bank;
1588273921b7a41251f3f5a87df995913cb291902caHenri Verbeet	unsigned			mode;
1598273921b7a41251f3f5a87df995913cb291902caHenri Verbeet	unsigned			addr;
1607b1c0cbc90d456384b0950ad21faa3c61a6b43ffGlenn Kennard	unsigned			index_mode;
1618273921b7a41251f3f5a87df995913cb291902caHenri Verbeet};
1628273921b7a41251f3f5a87df995913cb291902caHenri Verbeet
1634a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_cf {
164de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	struct list_head		list;
1654f7c21899ad449be2bc1157ce1d2d99296a34499Marek Olšák
166022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin	unsigned			op;
167de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			addr;
168de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			ndw;
169de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			id;
170e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse	unsigned			cond;
171e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse	unsigned			pop_count;
172d503bbbf3082b5b301019721466d6fd2b41da03aDave Airlie	unsigned			count;
173e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse	unsigned			cf_addr; /* control flow addr */
174d649bf51ec787021f7872e2a4c09fb2188c0891bVadim Girlin	struct r600_bytecode_kcache		kcache[4];
175c5edfcc410bdf3dbe4f37418de8f0009746c9578Dave Airlie	unsigned			r6xx_uses_waterfall;
176d649bf51ec787021f7872e2a4c09fb2188c0891bVadim Girlin	unsigned			eg_alu_extended;
177552aae7e47e93ada58649a92ae9e7da37afb05c3Vadim Girlin	unsigned			barrier;
178552aae7e47e93ada58649a92ae9e7da37afb05c3Vadim Girlin	unsigned			end_of_program;
179de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	struct list_head		alu;
18033241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	struct list_head		tex;
181de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	struct list_head		vtx;
1822b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie	struct list_head		gds;
1834a47662beaa2092447939db7880531fb706afeddMarek Olšák	struct r600_bytecode_output		output;
1844a47662beaa2092447939db7880531fb706afeddMarek Olšák	struct r600_bytecode_alu		*curr_bs_head;
1854a47662beaa2092447939db7880531fb706afeddMarek Olšák	struct r600_bytecode_alu		*prev_bs_head;
1864a47662beaa2092447939db7880531fb706afeddMarek Olšák	struct r600_bytecode_alu		*prev2_bs_head;
18794a6a363792e8cb57a9f15778a3f3440d5b754abTom Stellard	unsigned isa[2];
188de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse};
189de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse
1907ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse#define FC_NONE				0
1917ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse#define FC_IF				1
1927ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse#define FC_LOOP				2
1937ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse#define FC_REP				3
1947ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse#define FC_PUSH_VPM			4
1957ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse#define FC_PUSH_WQM			5
196a03d456f5a41926e39194de70b2d50776e64b8a2Dave Airlie
197a03d456f5a41926e39194de70b2d50776e64b8a2Dave Airliestruct r600_cf_stack_entry {
198e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse	int				type;
1994a47662beaa2092447939db7880531fb706afeddMarek Olšák	struct r600_bytecode_cf		*start;
2004a47662beaa2092447939db7880531fb706afeddMarek Olšák	struct r600_bytecode_cf		**mid; /* used to store the else point */
201e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse	int				num_mid;
20209547e1bcee7df3444dd8682770d1b31da1a5822Dave Airlie};
20309547e1bcee7df3444dd8682770d1b31da1a5822Dave Airlie
20409547e1bcee7df3444dd8682770d1b31da1a5822Dave Airlie#define SQ_MAX_CALL_DEPTH 0x00000020
2057ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse
206c96b9834032952492efbd2d1f5511fe225704918Dave Airlie#define AR_HANDLE_NORMAL 0
207c96b9834032952492efbd2d1f5511fe225704918Dave Airlie#define AR_HANDLE_RV6XX 1 /* except RV670 */
208c96b9834032952492efbd2d1f5511fe225704918Dave Airlie
2099be624b3ef32ae6311010cf05531e12051b647dcVadim Girlinstruct r600_stack_info {
2109be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin	/* current level of non-WQM PUSH operations
2119be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin	 * (PUSH, PUSH_ELSE, ALU_PUSH_BEFORE) */
2129be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin	int push;
2139be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin	/* current level of WQM PUSH operations
2149be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin	 * (PUSH, PUSH_ELSE, PUSH_WQM) */
2159be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin	int push_wqm;
2169be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin	/* current loop level */
2179be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin	int loop;
2189be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin
2199be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin	/* required depth */
2209be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin	int max_entries;
2219be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin	/* subentries per entry */
2229be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin	int entry_size;
2239be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin};
224c96b9834032952492efbd2d1f5511fe225704918Dave Airlie
2254a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode {
22689dc31a28d8e5607989ec11cfd29310c1c97f6acHenri Verbeet	enum chip_class			chip_class;
227476aaf8b8ee77d84c295e1429035e92ecf3a7349Christoph Bumiller	enum radeon_family		family;
2285a3fac4d2667b5d46058564151142fec158f5f82Marek Olšák	bool				has_compressed_msaa_texturing;
229f609b2ab0342d77a8beca9efb5fbc5b66ff98295Jerome Glisse	int				type;
230de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	struct list_head		cf;
2314a47662beaa2092447939db7880531fb706afeddMarek Olšák	struct r600_bytecode_cf		*cf_last;
232de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			ndw;
233de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			ncf;
234de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			ngpr;
235e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse	unsigned			nstack;
2362840bec56f79347b95dec5458b20d4a46d1aa445Tom Stellard	unsigned			nlds_dw;
237de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			nresource;
2387e42b7e5d2aebcda0e6bf081b6661411731e6df2Jerome Glisse	unsigned			force_add_cf;
23978293b99b23268e6698f1267aaf40647c17d95a5Marek Olšák	uint32_t			*bytecode;
24078293b99b23268e6698f1267aaf40647c17d95a5Marek Olšák	uint32_t			fc_sp;
241e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse	struct r600_cf_stack_entry	fc_stack[32];
2429be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin	struct r600_stack_info		stack;
2438e366dc365d01213b71b87ace47d30938db74845Vadim Girlin	unsigned	ar_loaded;
2448e366dc365d01213b71b87ace47d30938db74845Vadim Girlin	unsigned	ar_reg;
24533dc412b8901ec6b693644a40b1cd62a2cde2e99Tom Stellard	unsigned	ar_chan;
246c96b9834032952492efbd2d1f5511fe225704918Dave Airlie	unsigned        ar_handling;
247c96b9834032952492efbd2d1f5511fe225704918Dave Airlie	unsigned        r6xx_nop_after_rel_dst;
248e1dcd333e4e0757f3fd2b010bc14b36340b70c39Jan Vesely	bool            index_loaded[2];
249e1dcd333e4e0757f3fd2b010bc14b36340b70c39Jan Vesely	unsigned        index_reg[2]; /* indexing register CF_INDEX_[01] */
250ad1df471d083630106da8c39ec076f49e779e965Vadim Girlin	unsigned        debug_id;
251022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin	struct r600_isa* isa;
252de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse};
253de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse
2546abd7771c6ab2c733b20835e211060dd18fd847dJerome Glisse/* eg_asm.c */
2554a47662beaa2092447939db7880531fb706afeddMarek Olšákint eg_bytecode_cf_build(struct r600_bytecode *bc, struct r600_bytecode_cf *cf);
2567b1c0cbc90d456384b0950ad21faa3c61a6b43ffGlenn Kennardint egcm_load_index_reg(struct r600_bytecode *bc, unsigned id, bool inside_alu_clause);
2572b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlieint eg_bytecode_gds_build(struct r600_bytecode *bc, struct r600_bytecode_gds *gds, unsigned id);
258816bb30245b9e4be78cc24228ada450a425b948dDave Airlieint eg_bytecode_alu_build(struct r600_bytecode *bc,
259816bb30245b9e4be78cc24228ada450a425b948dDave Airlie			  struct r600_bytecode_alu *alu, unsigned id);
2606abd7771c6ab2c733b20835e211060dd18fd847dJerome Glisse/* r600_asm.c */
26196ed6c90eff58ce030c39c2b4db6daf512586b34Marek Olšákvoid r600_bytecode_init(struct r600_bytecode *bc,
26296ed6c90eff58ce030c39c2b4db6daf512586b34Marek Olšák			enum chip_class chip_class,
26396ed6c90eff58ce030c39c2b4db6daf512586b34Marek Olšák			enum radeon_family family,
2645a3fac4d2667b5d46058564151142fec158f5f82Marek Olšák			bool has_compressed_msaa_texturing);
2654a47662beaa2092447939db7880531fb706afeddMarek Olšákvoid r600_bytecode_clear(struct r600_bytecode *bc);
266022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinint r600_bytecode_add_alu(struct r600_bytecode *bc,
267022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin		const struct r600_bytecode_alu *alu);
268022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinint r600_bytecode_add_vtx(struct r600_bytecode *bc,
269022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin		const struct r600_bytecode_vtx *vtx);
270022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinint r600_bytecode_add_tex(struct r600_bytecode *bc,
271022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin		const struct r600_bytecode_tex *tex);
2722b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlieint r600_bytecode_add_gds(struct r600_bytecode *bc,
2732b25d9ac7f364259058bf8098ebd40c7c484bcd7Dave Airlie		const struct r600_bytecode_gds *gds);
274022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinint r600_bytecode_add_output(struct r600_bytecode *bc,
275022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin		const struct r600_bytecode_output *output);
2764a47662beaa2092447939db7880531fb706afeddMarek Olšákint r600_bytecode_build(struct r600_bytecode *bc);
277af38695f5105a2f766f3df393c3e42067c3706f2Vincent Lejeuneint r600_bytecode_add_cf(struct r600_bytecode *bc);
278022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinint r600_bytecode_add_cfinst(struct r600_bytecode *bc,
279022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin		unsigned op);
280022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinint r600_bytecode_add_alu_type(struct r600_bytecode *bc,
281022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin		const struct r600_bytecode_alu *alu, unsigned type);
282022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinvoid r600_bytecode_special_constants(uint32_t value,
283f75f21a24ae2dd83507f3d4d8007f0fcfe6db802Ivan Kalvachev		unsigned *sel, unsigned *neg, unsigned abs);
284e42111ecbaca8b6dab3c8a7a8cbc295bb6b404ebVadim Girlinvoid r600_bytecode_disasm(struct r600_bytecode *bc);
285022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinvoid r600_bytecode_alu_read(struct r600_bytecode *bc,
286022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin		struct r600_bytecode_alu *alu, uint32_t word0, uint32_t word1);
2874a47662beaa2092447939db7880531fb706afeddMarek Olšák
2884a47662beaa2092447939db7880531fb706afeddMarek Olšákint cm_bytecode_add_cf_end(struct r600_bytecode *bc);
2897779f6d1dffde2c0501e44adc342e52803de08d4Dave Airlie
290a50edc8ed84c4c48c0dc8e1a079e8d5e8f1c3a0eMarek Olšákvoid *r600_create_vertex_fetch_shader(struct pipe_context *ctx,
291a50edc8ed84c4c48c0dc8e1a079e8d5e8f1c3a0eMarek Olšák				      unsigned count,
292a50edc8ed84c4c48c0dc8e1a079e8d5e8f1c3a0eMarek Olšák				      const struct pipe_vertex_element *elements);
293e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse
2946abd7771c6ab2c733b20835e211060dd18fd847dJerome Glisse/* r700_asm.c */
295022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinvoid r700_bytecode_cf_vtx_build(uint32_t *bytecode,
296022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin		const struct r600_bytecode_cf *cf);
297022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinint r700_bytecode_alu_build(struct r600_bytecode *bc,
298022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin		struct r600_bytecode_alu *alu, unsigned id);
299022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinvoid r700_bytecode_alu_read(struct r600_bytecode *bc,
300022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin		struct r600_bytecode_alu *alu, uint32_t word0, uint32_t word1);
301022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinvoid r600_bytecode_export_read(struct r600_bytecode *bc,
302022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin		struct r600_bytecode_output *output, uint32_t word0, uint32_t word1);
303022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinvoid eg_bytecode_export_read(struct r600_bytecode *bc,
304022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin		struct r600_bytecode_output *output, uint32_t word0, uint32_t word1);
3056abd7771c6ab2c733b20835e211060dd18fd847dJerome Glisse
306d23aa650015ec017649f5a4ce8cb12d8c314bd3aDave Airlievoid r600_vertex_data_type(enum pipe_format pformat, unsigned *format,
307d23aa650015ec017649f5a4ce8cb12d8c314bd3aDave Airlie			   unsigned *num_format, unsigned *format_comp, unsigned *endian);
3083be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie
3093be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airliestatic inline int fp64_switch(int i)
3103be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie{
3113be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie	switch (i) {
3123be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie	case 0:
3133be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie		return 1;
3143be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie	case 1:
3153be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie		return 0;
3163be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie	case 2:
3173be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie		return 3;
3183be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie	case 3:
3193be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie		return 2;
3203be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie	}
3213be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie	return 0;
3223be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie}
323de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse#endif
324