1 /* SPDX-License-Identifier: MIT */
2 
3 #include "radeon.h"
4 
5 #define R100_TRACK_MAX_TEXTURE 3
6 #define R200_TRACK_MAX_TEXTURE 6
7 #define R300_TRACK_MAX_TEXTURE 16
8 
9 #define R100_MAX_CB 1
10 #define R300_MAX_CB 4
11 
12 /*
13  * CS functions
14  */
15 struct r100_cs_track_cb {
16 	struct radeon_bo	*robj;
17 	unsigned		pitch;
18 	unsigned		cpp;
19 	unsigned		offset;
20 };
21 
22 struct r100_cs_track_array {
23 	struct radeon_bo	*robj;
24 	unsigned		esize;
25 };
26 
27 struct r100_cs_cube_info {
28 	struct radeon_bo	*robj;
29 	unsigned		offset;
30 	unsigned		width;
31 	unsigned		height;
32 };
33 
34 #define R100_TRACK_COMP_NONE   0
35 #define R100_TRACK_COMP_DXT1   1
36 #define R100_TRACK_COMP_DXT35  2
37 
38 struct r100_cs_track_texture {
39 	struct radeon_bo	*robj;
40 	struct r100_cs_cube_info cube_info[5]; /* info for 5 non-primary faces */
41 	unsigned		pitch;
42 	unsigned		width;
43 	unsigned		height;
44 	unsigned		num_levels;
45 	unsigned		cpp;
46 	unsigned		tex_coord_type;
47 	unsigned		txdepth;
48 	unsigned		width_11;
49 	unsigned		height_11;
50 	bool			use_pitch;
51 	bool			enabled;
52 	bool                    lookup_disable;
53 	bool			roundup_w;
54 	bool			roundup_h;
55 	unsigned                compress_format;
56 };
57 
58 struct r100_cs_track {
59 	unsigned			num_cb;
60 	unsigned                        num_texture;
61 	unsigned			maxy;
62 	unsigned			vtx_size;
63 	unsigned			vap_vf_cntl;
64 	unsigned			vap_alt_nverts;
65 	unsigned			immd_dwords;
66 	unsigned			num_arrays;
67 	unsigned			max_indx;
68 	unsigned			color_channel_mask;
69 	struct r100_cs_track_array	arrays[16];
70 	struct r100_cs_track_cb 	cb[R300_MAX_CB];
71 	struct r100_cs_track_cb 	zb;
72 	struct r100_cs_track_cb 	aa;
73 	struct r100_cs_track_texture	textures[R300_TRACK_MAX_TEXTURE];
74 	bool				z_enabled;
75 	bool                            separate_cube;
76 	bool				zb_cb_clear;
77 	bool				blend_read_enable;
78 	bool				cb_dirty;
79 	bool				zb_dirty;
80 	bool				tex_dirty;
81 	bool				aa_dirty;
82 	bool				aaresolve;
83 };
84 
85 int r100_cs_track_check(struct radeon_device *rdev, struct r100_cs_track *track);
86 void r100_cs_track_clear(struct radeon_device *rdev, struct r100_cs_track *track);
87 
88 int r100_cs_packet_parse_vline(struct radeon_cs_parser *p);
89 
90 int r200_packet0_check(struct radeon_cs_parser *p,
91 		       struct radeon_cs_packet *pkt,
92 		       unsigned idx, unsigned reg);
93 
94 int r100_reloc_pitch_offset(struct radeon_cs_parser *p,
95 			    struct radeon_cs_packet *pkt,
96 			    unsigned idx,
97 			    unsigned reg);
98 int r100_packet3_load_vbpntr(struct radeon_cs_parser *p,
99 			     struct radeon_cs_packet *pkt,
100 			     int idx);
101