r600_asm.h revision f75f21a24ae2dd83507f3d4d8007f0fcfe6db802
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;
55da676eab93e7dad30b574b4eb4cffd4df952e819Vincent Lejeune	unsigned			execute_mask;
56da676eab93e7dad30b574b4eb4cffd4df952e819Vincent Lejeune	unsigned			update_pred;
57da676eab93e7dad30b574b4eb4cffd4df952e819Vincent Lejeune	unsigned			pred_sel;
58e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse	unsigned			bank_swizzle;
59e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse	unsigned			bank_swizzle_force;
60c60cb25bfb15fc83e78d9f2c74646dcc5ad07792Christian König	unsigned			omod;
61c96b9834032952492efbd2d1f5511fe225704918Dave Airlie	unsigned                        index_mode;
62de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse};
63de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse
644a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_tex {
6533241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	struct list_head		list;
66022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin	unsigned			op;
6796ed6c90eff58ce030c39c2b4db6daf512586b34Marek Olšák	unsigned			inst_mod;
6833241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			resource_id;
6933241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			src_gpr;
7033241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			src_rel;
7133241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			dst_gpr;
7233241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			dst_rel;
7333241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			dst_sel_x;
7433241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			dst_sel_y;
7533241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			dst_sel_z;
7633241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			dst_sel_w;
7733241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			lod_bias;
7833241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			coord_type_x;
7933241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			coord_type_y;
8033241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			coord_type_z;
8133241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			coord_type_w;
82fa5078c255b5b57514ae854ecd6264379641c924Dave Airlie	int				offset_x;
83fa5078c255b5b57514ae854ecd6264379641c924Dave Airlie	int				offset_y;
84fa5078c255b5b57514ae854ecd6264379641c924Dave Airlie	int				offset_z;
8533241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			sampler_id;
8633241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			src_sel_x;
8733241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			src_sel_y;
8833241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			src_sel_z;
8933241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			src_sel_w;
907b1c0cbc90d456384b0950ad21faa3c61a6b43ffGlenn Kennard	/* indexed samplers/resources only on evergreen/cayman */
917b1c0cbc90d456384b0950ad21faa3c61a6b43ffGlenn Kennard	unsigned			sampler_index_mode;
927b1c0cbc90d456384b0950ad21faa3c61a6b43ffGlenn Kennard	unsigned			resource_index_mode;
9333241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse};
9433241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse
954a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_vtx {
96de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	struct list_head		list;
97022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin	unsigned			op;
98de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			fetch_type;
99de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			buffer_id;
100de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			src_gpr;
101de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			src_sel_x;
102de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			mega_fetch_count;
103de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			dst_gpr;
104de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			dst_sel_x;
105de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			dst_sel_y;
106de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			dst_sel_z;
107de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			dst_sel_w;
108e973221538d5edfad62abedf5b37a4fb774d71fcDave Airlie	unsigned			use_const_fields;
109e973221538d5edfad62abedf5b37a4fb774d71fcDave Airlie	unsigned			data_format;
110e973221538d5edfad62abedf5b37a4fb774d71fcDave Airlie	unsigned			num_format_all;
111e973221538d5edfad62abedf5b37a4fb774d71fcDave Airlie	unsigned			format_comp_all;
112e973221538d5edfad62abedf5b37a4fb774d71fcDave Airlie	unsigned			srf_mode_all;
11396bbc627f369c0100b950f81531b1fe9ef586c34Christian König	unsigned			offset;
114843dfe3206c4f397c7911b748373dde5540392a4Cédric Cano	unsigned			endian;
1157b1c0cbc90d456384b0950ad21faa3c61a6b43ffGlenn Kennard	unsigned			buffer_index_mode;
116de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse};
117de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse
1184a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_output {
119de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			array_base;
120543b2331d7b45a29ccd3530daa2389e87e65d89bMarek Olšák	unsigned			array_size;
121543b2331d7b45a29ccd3530daa2389e87e65d89bMarek Olšák	unsigned			comp_mask;
122de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			type;
1234f7c21899ad449be2bc1157ce1d2d99296a34499Marek Olšák
124022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin	unsigned			op;
1254f7c21899ad449be2bc1157ce1d2d99296a34499Marek Olšák
126de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			elem_size;
127de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			gpr;
128de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			swizzle_x;
129de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			swizzle_y;
130de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			swizzle_z;
131de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			swizzle_w;
1328ca3b140eb53fd8063337a5a2a54a35987d597bcChristian König	unsigned			burst_count;
133ae29a098eaaa9f061cc82a28b8e258e44f03902bDave Airlie	unsigned			index_gpr;
134de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse};
135de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse
1364a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_kcache {
1378273921b7a41251f3f5a87df995913cb291902caHenri Verbeet	unsigned			bank;
1388273921b7a41251f3f5a87df995913cb291902caHenri Verbeet	unsigned			mode;
1398273921b7a41251f3f5a87df995913cb291902caHenri Verbeet	unsigned			addr;
1407b1c0cbc90d456384b0950ad21faa3c61a6b43ffGlenn Kennard	unsigned			index_mode;
1418273921b7a41251f3f5a87df995913cb291902caHenri Verbeet};
1428273921b7a41251f3f5a87df995913cb291902caHenri Verbeet
1434a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_cf {
144de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	struct list_head		list;
1454f7c21899ad449be2bc1157ce1d2d99296a34499Marek Olšák
146022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin	unsigned			op;
147de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			addr;
148de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			ndw;
149de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			id;
150e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse	unsigned			cond;
151e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse	unsigned			pop_count;
152d503bbbf3082b5b301019721466d6fd2b41da03aDave Airlie	unsigned			count;
153e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse	unsigned			cf_addr; /* control flow addr */
154d649bf51ec787021f7872e2a4c09fb2188c0891bVadim Girlin	struct r600_bytecode_kcache		kcache[4];
155c5edfcc410bdf3dbe4f37418de8f0009746c9578Dave Airlie	unsigned			r6xx_uses_waterfall;
156d649bf51ec787021f7872e2a4c09fb2188c0891bVadim Girlin	unsigned			eg_alu_extended;
157552aae7e47e93ada58649a92ae9e7da37afb05c3Vadim Girlin	unsigned			barrier;
158552aae7e47e93ada58649a92ae9e7da37afb05c3Vadim Girlin	unsigned			end_of_program;
159de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	struct list_head		alu;
16033241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	struct list_head		tex;
161de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	struct list_head		vtx;
1624a47662beaa2092447939db7880531fb706afeddMarek Olšák	struct r600_bytecode_output		output;
1634a47662beaa2092447939db7880531fb706afeddMarek Olšák	struct r600_bytecode_alu		*curr_bs_head;
1644a47662beaa2092447939db7880531fb706afeddMarek Olšák	struct r600_bytecode_alu		*prev_bs_head;
1654a47662beaa2092447939db7880531fb706afeddMarek Olšák	struct r600_bytecode_alu		*prev2_bs_head;
16694a6a363792e8cb57a9f15778a3f3440d5b754abTom Stellard	unsigned isa[2];
167de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse};
168de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse
1697ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse#define FC_NONE				0
1707ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse#define FC_IF				1
1717ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse#define FC_LOOP				2
1727ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse#define FC_REP				3
1737ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse#define FC_PUSH_VPM			4
1747ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse#define FC_PUSH_WQM			5
175a03d456f5a41926e39194de70b2d50776e64b8a2Dave Airlie
176a03d456f5a41926e39194de70b2d50776e64b8a2Dave Airliestruct r600_cf_stack_entry {
177e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse	int				type;
1784a47662beaa2092447939db7880531fb706afeddMarek Olšák	struct r600_bytecode_cf		*start;
1794a47662beaa2092447939db7880531fb706afeddMarek Olšák	struct r600_bytecode_cf		**mid; /* used to store the else point */
180e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse	int				num_mid;
18109547e1bcee7df3444dd8682770d1b31da1a5822Dave Airlie};
18209547e1bcee7df3444dd8682770d1b31da1a5822Dave Airlie
18309547e1bcee7df3444dd8682770d1b31da1a5822Dave Airlie#define SQ_MAX_CALL_DEPTH 0x00000020
1847ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse
185c96b9834032952492efbd2d1f5511fe225704918Dave Airlie#define AR_HANDLE_NORMAL 0
186c96b9834032952492efbd2d1f5511fe225704918Dave Airlie#define AR_HANDLE_RV6XX 1 /* except RV670 */
187c96b9834032952492efbd2d1f5511fe225704918Dave Airlie
1889be624b3ef32ae6311010cf05531e12051b647dcVadim Girlinstruct r600_stack_info {
1899be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin	/* current level of non-WQM PUSH operations
1909be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin	 * (PUSH, PUSH_ELSE, ALU_PUSH_BEFORE) */
1919be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin	int push;
1929be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin	/* current level of WQM PUSH operations
1939be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin	 * (PUSH, PUSH_ELSE, PUSH_WQM) */
1949be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin	int push_wqm;
1959be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin	/* current loop level */
1969be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin	int loop;
1979be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin
1989be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin	/* required depth */
1999be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin	int max_entries;
2009be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin	/* subentries per entry */
2019be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin	int entry_size;
2029be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin};
203c96b9834032952492efbd2d1f5511fe225704918Dave Airlie
2044a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode {
20589dc31a28d8e5607989ec11cfd29310c1c97f6acHenri Verbeet	enum chip_class			chip_class;
206476aaf8b8ee77d84c295e1429035e92ecf3a7349Christoph Bumiller	enum radeon_family		family;
2075a3fac4d2667b5d46058564151142fec158f5f82Marek Olšák	bool				has_compressed_msaa_texturing;
208f609b2ab0342d77a8beca9efb5fbc5b66ff98295Jerome Glisse	int				type;
209de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	struct list_head		cf;
2104a47662beaa2092447939db7880531fb706afeddMarek Olšák	struct r600_bytecode_cf		*cf_last;
211de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			ndw;
212de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			ncf;
213de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			ngpr;
214e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse	unsigned			nstack;
2152840bec56f79347b95dec5458b20d4a46d1aa445Tom Stellard	unsigned			nlds_dw;
216de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			nresource;
2177e42b7e5d2aebcda0e6bf081b6661411731e6df2Jerome Glisse	unsigned			force_add_cf;
21878293b99b23268e6698f1267aaf40647c17d95a5Marek Olšák	uint32_t			*bytecode;
21978293b99b23268e6698f1267aaf40647c17d95a5Marek Olšák	uint32_t			fc_sp;
220e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse	struct r600_cf_stack_entry	fc_stack[32];
2219be624b3ef32ae6311010cf05531e12051b647dcVadim Girlin	struct r600_stack_info		stack;
2228e366dc365d01213b71b87ace47d30938db74845Vadim Girlin	unsigned	ar_loaded;
2238e366dc365d01213b71b87ace47d30938db74845Vadim Girlin	unsigned	ar_reg;
22433dc412b8901ec6b693644a40b1cd62a2cde2e99Tom Stellard	unsigned	ar_chan;
225c96b9834032952492efbd2d1f5511fe225704918Dave Airlie	unsigned        ar_handling;
226c96b9834032952492efbd2d1f5511fe225704918Dave Airlie	unsigned        r6xx_nop_after_rel_dst;
2277b1c0cbc90d456384b0950ad21faa3c61a6b43ffGlenn Kennard	bool		index_loaded[2];
2287b1c0cbc90d456384b0950ad21faa3c61a6b43ffGlenn Kennard	unsigned 	index_reg[2]; /* indexing register CF_INDEX_[01] */
229ad1df471d083630106da8c39ec076f49e779e965Vadim Girlin	unsigned        debug_id;
230022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin	struct r600_isa* isa;
231de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse};
232de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse
2336abd7771c6ab2c733b20835e211060dd18fd847dJerome Glisse/* eg_asm.c */
2344a47662beaa2092447939db7880531fb706afeddMarek Olšákint eg_bytecode_cf_build(struct r600_bytecode *bc, struct r600_bytecode_cf *cf);
2357b1c0cbc90d456384b0950ad21faa3c61a6b43ffGlenn Kennardint egcm_load_index_reg(struct r600_bytecode *bc, unsigned id, bool inside_alu_clause);
2366abd7771c6ab2c733b20835e211060dd18fd847dJerome Glisse
2376abd7771c6ab2c733b20835e211060dd18fd847dJerome Glisse/* r600_asm.c */
23896ed6c90eff58ce030c39c2b4db6daf512586b34Marek Olšákvoid r600_bytecode_init(struct r600_bytecode *bc,
23996ed6c90eff58ce030c39c2b4db6daf512586b34Marek Olšák			enum chip_class chip_class,
24096ed6c90eff58ce030c39c2b4db6daf512586b34Marek Olšák			enum radeon_family family,
2415a3fac4d2667b5d46058564151142fec158f5f82Marek Olšák			bool has_compressed_msaa_texturing);
2424a47662beaa2092447939db7880531fb706afeddMarek Olšákvoid r600_bytecode_clear(struct r600_bytecode *bc);
243022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinint r600_bytecode_add_alu(struct r600_bytecode *bc,
244022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin		const struct r600_bytecode_alu *alu);
245022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinint r600_bytecode_add_vtx(struct r600_bytecode *bc,
246022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin		const struct r600_bytecode_vtx *vtx);
247022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinint r600_bytecode_add_tex(struct r600_bytecode *bc,
248022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin		const struct r600_bytecode_tex *tex);
249022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinint r600_bytecode_add_output(struct r600_bytecode *bc,
250022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin		const struct r600_bytecode_output *output);
2514a47662beaa2092447939db7880531fb706afeddMarek Olšákint r600_bytecode_build(struct r600_bytecode *bc);
252af38695f5105a2f766f3df393c3e42067c3706f2Vincent Lejeuneint r600_bytecode_add_cf(struct r600_bytecode *bc);
253022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinint r600_bytecode_add_cfinst(struct r600_bytecode *bc,
254022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin		unsigned op);
255022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinint r600_bytecode_add_alu_type(struct r600_bytecode *bc,
256022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin		const struct r600_bytecode_alu *alu, unsigned type);
257022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinvoid r600_bytecode_special_constants(uint32_t value,
258f75f21a24ae2dd83507f3d4d8007f0fcfe6db802Ivan Kalvachev		unsigned *sel, unsigned *neg, unsigned abs);
259e42111ecbaca8b6dab3c8a7a8cbc295bb6b404ebVadim Girlinvoid r600_bytecode_disasm(struct r600_bytecode *bc);
260022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinvoid r600_bytecode_alu_read(struct r600_bytecode *bc,
261022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin		struct r600_bytecode_alu *alu, uint32_t word0, uint32_t word1);
2624a47662beaa2092447939db7880531fb706afeddMarek Olšák
2634a47662beaa2092447939db7880531fb706afeddMarek Olšákint cm_bytecode_add_cf_end(struct r600_bytecode *bc);
2647779f6d1dffde2c0501e44adc342e52803de08d4Dave Airlie
265a50edc8ed84c4c48c0dc8e1a079e8d5e8f1c3a0eMarek Olšákvoid *r600_create_vertex_fetch_shader(struct pipe_context *ctx,
266a50edc8ed84c4c48c0dc8e1a079e8d5e8f1c3a0eMarek Olšák				      unsigned count,
267a50edc8ed84c4c48c0dc8e1a079e8d5e8f1c3a0eMarek Olšák				      const struct pipe_vertex_element *elements);
268e0b6df4fcce0964ea7930efeb40cb487b4c53337Jerome Glisse
2696abd7771c6ab2c733b20835e211060dd18fd847dJerome Glisse/* r700_asm.c */
270022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinvoid r700_bytecode_cf_vtx_build(uint32_t *bytecode,
271022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin		const struct r600_bytecode_cf *cf);
272022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinint r700_bytecode_alu_build(struct r600_bytecode *bc,
273022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin		struct r600_bytecode_alu *alu, unsigned id);
274022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinvoid r700_bytecode_alu_read(struct r600_bytecode *bc,
275022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin		struct r600_bytecode_alu *alu, uint32_t word0, uint32_t word1);
276022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinvoid r600_bytecode_export_read(struct r600_bytecode *bc,
277022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin		struct r600_bytecode_output *output, uint32_t word0, uint32_t word1);
278022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlinvoid eg_bytecode_export_read(struct r600_bytecode *bc,
279022122ee63b8a00afc23eaa347df934a79fb1d4cVadim Girlin		struct r600_bytecode_output *output, uint32_t word0, uint32_t word1);
2806abd7771c6ab2c733b20835e211060dd18fd847dJerome Glisse
281d23aa650015ec017649f5a4ce8cb12d8c314bd3aDave Airlievoid r600_vertex_data_type(enum pipe_format pformat, unsigned *format,
282d23aa650015ec017649f5a4ce8cb12d8c314bd3aDave Airlie			   unsigned *num_format, unsigned *format_comp, unsigned *endian);
2833be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie
2843be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airliestatic inline int fp64_switch(int i)
2853be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie{
2863be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie	switch (i) {
2873be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie	case 0:
2883be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie		return 1;
2893be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie	case 1:
2903be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie		return 0;
2913be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie	case 2:
2923be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie		return 3;
2933be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie	case 3:
2943be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie		return 2;
2953be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie	}
2963be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie	return 0;
2973be5ee1574e0a3494c0550f4b7ae09117855d749Dave Airlie}
298de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse#endif
299