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