1254885Sdumbbell#include <sys/cdefs.h>
2254885Sdumbbell__FBSDID("$FreeBSD$");
3254885Sdumbbell
4254885Sdumbbell#define R100_TRACK_MAX_TEXTURE 3
5254885Sdumbbell#define R200_TRACK_MAX_TEXTURE 6
6254885Sdumbbell#define R300_TRACK_MAX_TEXTURE 16
7254885Sdumbbell
8254885Sdumbbell#define R100_MAX_CB 1
9254885Sdumbbell#define R300_MAX_CB 4
10254885Sdumbbell
11254885Sdumbbell/*
12254885Sdumbbell * CS functions
13254885Sdumbbell */
14254885Sdumbbellstruct r100_cs_track_cb {
15254885Sdumbbell	struct radeon_bo	*robj;
16254885Sdumbbell	unsigned		pitch;
17254885Sdumbbell	unsigned		cpp;
18254885Sdumbbell	unsigned		offset;
19254885Sdumbbell};
20254885Sdumbbell
21254885Sdumbbellstruct r100_cs_track_array {
22254885Sdumbbell	struct radeon_bo	*robj;
23254885Sdumbbell	unsigned		esize;
24254885Sdumbbell};
25254885Sdumbbell
26254885Sdumbbellstruct r100_cs_cube_info {
27254885Sdumbbell	struct radeon_bo	*robj;
28254885Sdumbbell	unsigned		offset;
29254885Sdumbbell	unsigned		width;
30254885Sdumbbell	unsigned		height;
31254885Sdumbbell};
32254885Sdumbbell
33254885Sdumbbell#define R100_TRACK_COMP_NONE   0
34254885Sdumbbell#define R100_TRACK_COMP_DXT1   1
35254885Sdumbbell#define R100_TRACK_COMP_DXT35  2
36254885Sdumbbell
37254885Sdumbbellstruct r100_cs_track_texture {
38254885Sdumbbell	struct radeon_bo	*robj;
39254885Sdumbbell	struct r100_cs_cube_info cube_info[5]; /* info for 5 non-primary faces */
40254885Sdumbbell	unsigned		pitch;
41254885Sdumbbell	unsigned		width;
42254885Sdumbbell	unsigned		height;
43254885Sdumbbell	unsigned		num_levels;
44254885Sdumbbell	unsigned		cpp;
45254885Sdumbbell	unsigned		tex_coord_type;
46254885Sdumbbell	unsigned		txdepth;
47254885Sdumbbell	unsigned		width_11;
48254885Sdumbbell	unsigned		height_11;
49254885Sdumbbell	bool			use_pitch;
50254885Sdumbbell	bool			enabled;
51254885Sdumbbell	bool                    lookup_disable;
52254885Sdumbbell	bool			roundup_w;
53254885Sdumbbell	bool			roundup_h;
54254885Sdumbbell	unsigned                compress_format;
55254885Sdumbbell};
56254885Sdumbbell
57254885Sdumbbellstruct r100_cs_track {
58254885Sdumbbell	unsigned			num_cb;
59254885Sdumbbell	unsigned                        num_texture;
60254885Sdumbbell	unsigned			maxy;
61254885Sdumbbell	unsigned			vtx_size;
62254885Sdumbbell	unsigned			vap_vf_cntl;
63254885Sdumbbell	unsigned			vap_alt_nverts;
64254885Sdumbbell	unsigned			immd_dwords;
65254885Sdumbbell	unsigned			num_arrays;
66254885Sdumbbell	unsigned			max_indx;
67254885Sdumbbell	unsigned			color_channel_mask;
68254885Sdumbbell	struct r100_cs_track_array	arrays[16];
69254885Sdumbbell	struct r100_cs_track_cb 	cb[R300_MAX_CB];
70254885Sdumbbell	struct r100_cs_track_cb 	zb;
71254885Sdumbbell	struct r100_cs_track_cb 	aa;
72254885Sdumbbell	struct r100_cs_track_texture	textures[R300_TRACK_MAX_TEXTURE];
73254885Sdumbbell	bool				z_enabled;
74254885Sdumbbell	bool                            separate_cube;
75254885Sdumbbell	bool				zb_cb_clear;
76254885Sdumbbell	bool				blend_read_enable;
77254885Sdumbbell	bool				cb_dirty;
78254885Sdumbbell	bool				zb_dirty;
79254885Sdumbbell	bool				tex_dirty;
80254885Sdumbbell	bool				aa_dirty;
81254885Sdumbbell	bool				aaresolve;
82254885Sdumbbell};
83254885Sdumbbell
84254885Sdumbbellint r100_cs_track_check(struct radeon_device *rdev, struct r100_cs_track *track);
85254885Sdumbbellvoid r100_cs_track_clear(struct radeon_device *rdev, struct r100_cs_track *track);
86254885Sdumbbellint r100_cs_packet_next_reloc(struct radeon_cs_parser *p,
87254885Sdumbbell			      struct radeon_cs_reloc **cs_reloc);
88254885Sdumbbellvoid r100_cs_dump_packet(struct radeon_cs_parser *p,
89254885Sdumbbell			 struct radeon_cs_packet *pkt);
90254885Sdumbbell
91254885Sdumbbellint r100_cs_packet_parse_vline(struct radeon_cs_parser *p);
92254885Sdumbbell
93254885Sdumbbellint r200_packet0_check(struct radeon_cs_parser *p,
94254885Sdumbbell		       struct radeon_cs_packet *pkt,
95254885Sdumbbell		       unsigned idx, unsigned reg);
96254885Sdumbbell
97254885Sdumbbellint r100_reloc_pitch_offset(struct radeon_cs_parser *p,
98254885Sdumbbell			    struct radeon_cs_packet *pkt,
99254885Sdumbbell			    unsigned idx,
100254885Sdumbbell			    unsigned reg);
101254885Sdumbbellint r100_packet3_load_vbpntr(struct radeon_cs_parser *p,
102254885Sdumbbell			     struct radeon_cs_packet *pkt,
103254885Sdumbbell			     int idx);
104