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