146924030SJonathan Gray /* SPDX-License-Identifier: MIT */
2551ebd83SDave Airlie 
388f489d2SSam Ravnborg #include "radeon.h"
488f489d2SSam Ravnborg 
5551ebd83SDave Airlie #define R100_TRACK_MAX_TEXTURE 3
6551ebd83SDave Airlie #define R200_TRACK_MAX_TEXTURE 6
7551ebd83SDave Airlie #define R300_TRACK_MAX_TEXTURE 16
8551ebd83SDave Airlie 
9551ebd83SDave Airlie #define R100_MAX_CB 1
10551ebd83SDave Airlie #define R300_MAX_CB 4
11551ebd83SDave Airlie 
12551ebd83SDave Airlie /*
13551ebd83SDave Airlie  * CS functions
14551ebd83SDave Airlie  */
15551ebd83SDave Airlie struct r100_cs_track_cb {
164c788679SJerome Glisse 	struct radeon_bo	*robj;
17551ebd83SDave Airlie 	unsigned		pitch;
18551ebd83SDave Airlie 	unsigned		cpp;
19551ebd83SDave Airlie 	unsigned		offset;
20551ebd83SDave Airlie };
21551ebd83SDave Airlie 
22551ebd83SDave Airlie struct r100_cs_track_array {
234c788679SJerome Glisse 	struct radeon_bo	*robj;
24551ebd83SDave Airlie 	unsigned		esize;
25551ebd83SDave Airlie };
26551ebd83SDave Airlie 
27551ebd83SDave Airlie struct r100_cs_cube_info {
284c788679SJerome Glisse 	struct radeon_bo	*robj;
29551ebd83SDave Airlie 	unsigned		offset;
30551ebd83SDave Airlie 	unsigned		width;
31551ebd83SDave Airlie 	unsigned		height;
32551ebd83SDave Airlie };
33551ebd83SDave Airlie 
34d785d78bSDave Airlie #define R100_TRACK_COMP_NONE   0
35d785d78bSDave Airlie #define R100_TRACK_COMP_DXT1   1
36d785d78bSDave Airlie #define R100_TRACK_COMP_DXT35  2
37d785d78bSDave Airlie 
38551ebd83SDave Airlie struct r100_cs_track_texture {
394c788679SJerome Glisse 	struct radeon_bo	*robj;
40551ebd83SDave Airlie 	struct r100_cs_cube_info cube_info[5]; /* info for 5 non-primary faces */
41551ebd83SDave Airlie 	unsigned		pitch;
42551ebd83SDave Airlie 	unsigned		width;
43551ebd83SDave Airlie 	unsigned		height;
44551ebd83SDave Airlie 	unsigned		num_levels;
45551ebd83SDave Airlie 	unsigned		cpp;
46551ebd83SDave Airlie 	unsigned		tex_coord_type;
47551ebd83SDave Airlie 	unsigned		txdepth;
48551ebd83SDave Airlie 	unsigned		width_11;
49551ebd83SDave Airlie 	unsigned		height_11;
50551ebd83SDave Airlie 	bool			use_pitch;
51551ebd83SDave Airlie 	bool			enabled;
5243b93fbfSAlex Deucher 	bool                    lookup_disable;
53551ebd83SDave Airlie 	bool			roundup_w;
54551ebd83SDave Airlie 	bool			roundup_h;
55d785d78bSDave Airlie 	unsigned                compress_format;
56551ebd83SDave Airlie };
57551ebd83SDave Airlie 
58551ebd83SDave Airlie struct r100_cs_track {
59551ebd83SDave Airlie 	unsigned			num_cb;
60551ebd83SDave Airlie 	unsigned                        num_texture;
61551ebd83SDave Airlie 	unsigned			maxy;
62551ebd83SDave Airlie 	unsigned			vtx_size;
63551ebd83SDave Airlie 	unsigned			vap_vf_cntl;
64cae94b0aSMarek Olšák 	unsigned			vap_alt_nverts;
65551ebd83SDave Airlie 	unsigned			immd_dwords;
66551ebd83SDave Airlie 	unsigned			num_arrays;
67551ebd83SDave Airlie 	unsigned			max_indx;
6846c64d4bSMarek Olšák 	unsigned			color_channel_mask;
69a27bb4b2SMarek Olšák 	struct r100_cs_track_array	arrays[16];
70551ebd83SDave Airlie 	struct r100_cs_track_cb 	cb[R300_MAX_CB];
71551ebd83SDave Airlie 	struct r100_cs_track_cb 	zb;
72fff1ce4dSMarek Olšák 	struct r100_cs_track_cb 	aa;
73551ebd83SDave Airlie 	struct r100_cs_track_texture	textures[R300_TRACK_MAX_TEXTURE];
74551ebd83SDave Airlie 	bool				z_enabled;
75551ebd83SDave Airlie 	bool                            separate_cube;
76797fd5b9SMarek Olšák 	bool				zb_cb_clear;
7746c64d4bSMarek Olšák 	bool				blend_read_enable;
7840b4a759SMarek Olšák 	bool				cb_dirty;
7940b4a759SMarek Olšák 	bool				zb_dirty;
8040b4a759SMarek Olšák 	bool				tex_dirty;
81fff1ce4dSMarek Olšák 	bool				aa_dirty;
82fff1ce4dSMarek Olšák 	bool				aaresolve;
83551ebd83SDave Airlie };
84551ebd83SDave Airlie 
85551ebd83SDave Airlie int r100_cs_track_check(struct radeon_device *rdev, struct r100_cs_track *track);
86551ebd83SDave Airlie void r100_cs_track_clear(struct radeon_device *rdev, struct r100_cs_track *track);
87551ebd83SDave Airlie 
88551ebd83SDave Airlie int r100_cs_packet_parse_vline(struct radeon_cs_parser *p);
89551ebd83SDave Airlie 
90551ebd83SDave Airlie int r200_packet0_check(struct radeon_cs_parser *p,
91551ebd83SDave Airlie 		       struct radeon_cs_packet *pkt,
92551ebd83SDave Airlie 		       unsigned idx, unsigned reg);
93551ebd83SDave Airlie 
94cbdd4501SAndi Kleen int r100_reloc_pitch_offset(struct radeon_cs_parser *p,
95551ebd83SDave Airlie 			    struct radeon_cs_packet *pkt,
96551ebd83SDave Airlie 			    unsigned idx,
97cbdd4501SAndi Kleen 			    unsigned reg);
98cbdd4501SAndi Kleen int r100_packet3_load_vbpntr(struct radeon_cs_parser *p,
99513bcb46SDave Airlie 			     struct radeon_cs_packet *pkt,
100cbdd4501SAndi Kleen 			     int idx);
101