libdrm_radeon: Optimize cs_gem_reloc to do less looping.
[glsdk/libdrm.git] / radeon / radeon_cs_int.h
2 #ifndef _RADEON_CS_INT_H_
3 #define _RADEON_CS_INT_H_
5 struct radeon_cs_space_check {
6     struct radeon_bo_int *bo;
7     uint32_t read_domains;
8     uint32_t write_domain;
9     uint32_t new_accounted;
10 };
12 struct radeon_cs_int {
13     /* keep first two in same place */
14     uint32_t                    *packets;    
15     unsigned                    cdw;
16     unsigned                    ndw;
17     unsigned                    section_ndw;
18     unsigned                    section_cdw;
19     /* private members */
20     struct radeon_cs_manager    *csm;
21     void                        *relocs;
22     unsigned                    crelocs;
23     unsigned                    relocs_total_size;
24     const char                  *section_file;
25     const char                  *section_func;
26     int                         section_line;
27     struct radeon_cs_space_check bos[MAX_SPACE_BOS];
28     int                         bo_count;
29     void                        (*space_flush_fn)(void *);
30     void                        *space_flush_data;
31     uint32_t                    id;
32 };
34 /* cs functions */
35 struct radeon_cs_funcs {
36     struct radeon_cs_int *(*cs_create)(struct radeon_cs_manager *csm,
37                                    uint32_t ndw);
38     int (*cs_write_reloc)(struct radeon_cs_int *cs,
39                           struct radeon_bo *bo,
40                           uint32_t read_domain,
41                           uint32_t write_domain,
42                           uint32_t flags);
43     int (*cs_begin)(struct radeon_cs_int *cs,
44                     uint32_t ndw,
45                     const char *file,
46                     const char *func,
47                     int line);
48     int (*cs_end)(struct radeon_cs_int *cs,
49                   const char *file, const char *func,
50                   int line);
53     int (*cs_emit)(struct radeon_cs_int *cs);
54     int (*cs_destroy)(struct radeon_cs_int *cs);
55     int (*cs_erase)(struct radeon_cs_int *cs);
56     int (*cs_need_flush)(struct radeon_cs_int *cs);
57     void (*cs_print)(struct radeon_cs_int *cs, FILE *file);
58 };
60 struct radeon_cs_manager {
61     struct radeon_cs_funcs  *funcs;
62     int                     fd;
63     int32_t vram_limit, gart_limit;
64     int32_t vram_write_used, gart_write_used;
65     int32_t read_used;
66 };
67 #endif