Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5563 | serge | 1 | #ifndef __NOUVEAU_SCREEN_H__ |
2 | #define __NOUVEAU_SCREEN_H__ |
||
3 | |||
4 | #include "pipe/p_screen.h" |
||
5 | #include "util/u_memory.h" |
||
6 | |||
7 | #ifdef DEBUG |
||
8 | # define NOUVEAU_ENABLE_DRIVER_STATISTICS |
||
9 | #endif |
||
10 | |||
11 | typedef uint32_t u32; |
||
12 | typedef uint16_t u16; |
||
13 | |||
14 | extern int nouveau_mesa_debug; |
||
15 | |||
16 | struct nouveau_bo; |
||
17 | |||
18 | struct nouveau_screen { |
||
19 | struct pipe_screen base; |
||
20 | struct nouveau_device *device; |
||
21 | struct nouveau_object *channel; |
||
22 | struct nouveau_client *client; |
||
23 | struct nouveau_pushbuf *pushbuf; |
||
24 | |||
25 | unsigned vidmem_bindings; /* PIPE_BIND_* where VRAM placement is desired */ |
||
26 | unsigned sysmem_bindings; /* PIPE_BIND_* where GART placement is desired */ |
||
27 | unsigned lowmem_bindings; /* PIPE_BIND_* that require an address < 4 GiB */ |
||
28 | /* |
||
29 | * For bindings with (vidmem & sysmem) bits set, PIPE_USAGE_* decides |
||
30 | * placement. |
||
31 | */ |
||
32 | |||
33 | uint16_t class_3d; |
||
34 | |||
35 | struct { |
||
36 | struct nouveau_fence *head; |
||
37 | struct nouveau_fence *tail; |
||
38 | struct nouveau_fence *current; |
||
39 | u32 sequence; |
||
40 | u32 sequence_ack; |
||
41 | void (*emit)(struct pipe_screen *, u32 *sequence); |
||
42 | u32 (*update)(struct pipe_screen *); |
||
43 | } fence; |
||
44 | |||
45 | struct nouveau_mman *mm_VRAM; |
||
46 | struct nouveau_mman *mm_GART; |
||
47 | |||
48 | int64_t cpu_gpu_time_delta; |
||
49 | |||
50 | boolean hint_buf_keep_sysmem_copy; |
||
51 | |||
52 | #ifdef NOUVEAU_ENABLE_DRIVER_STATISTICS |
||
53 | union { |
||
54 | uint64_t v[29]; |
||
55 | struct { |
||
56 | uint64_t tex_obj_current_count; |
||
57 | uint64_t tex_obj_current_bytes; |
||
58 | uint64_t buf_obj_current_count; |
||
59 | uint64_t buf_obj_current_bytes_vid; |
||
60 | uint64_t buf_obj_current_bytes_sys; |
||
61 | uint64_t tex_transfers_rd; |
||
62 | uint64_t tex_transfers_wr; |
||
63 | uint64_t tex_copy_count; |
||
64 | uint64_t tex_blit_count; |
||
65 | uint64_t tex_cache_flush_count; |
||
66 | uint64_t buf_transfers_rd; |
||
67 | uint64_t buf_transfers_wr; |
||
68 | uint64_t buf_read_bytes_staging_vid; |
||
69 | uint64_t buf_write_bytes_direct; |
||
70 | uint64_t buf_write_bytes_staging_vid; |
||
71 | uint64_t buf_write_bytes_staging_sys; |
||
72 | uint64_t buf_copy_bytes; |
||
73 | uint64_t buf_non_kernel_fence_sync_count; |
||
74 | uint64_t any_non_kernel_fence_sync_count; |
||
75 | uint64_t query_sync_count; |
||
76 | uint64_t gpu_serialize_count; |
||
77 | uint64_t draw_calls_array; |
||
78 | uint64_t draw_calls_indexed; |
||
79 | uint64_t draw_calls_fallback_count; |
||
80 | uint64_t user_buffer_upload_bytes; |
||
81 | uint64_t constbuf_upload_count; |
||
82 | uint64_t constbuf_upload_bytes; |
||
83 | uint64_t pushbuf_count; |
||
84 | uint64_t resource_validate_count; |
||
85 | } named; |
||
86 | } stats; |
||
87 | #endif |
||
88 | }; |
||
89 | |||
90 | #ifdef NOUVEAU_ENABLE_DRIVER_STATISTICS |
||
91 | # define NOUVEAU_DRV_STAT(s, n, v) do { \ |
||
92 | (s)->stats.named.n += (v); \ |
||
93 | } while(0) |
||
94 | # define NOUVEAU_DRV_STAT_RES(r, n, v) do { \ |
||
95 | nouveau_screen((r)->base.screen)->stats.named.n += (v); \ |
||
96 | } while(0) |
||
97 | # define NOUVEAU_DRV_STAT_IFD(x) x |
||
98 | #else |
||
99 | # define NOUVEAU_DRV_STAT(s, n, v) do { } while(0) |
||
100 | # define NOUVEAU_DRV_STAT_RES(r, n, v) do { } while(0) |
||
101 | # define NOUVEAU_DRV_STAT_IFD(x) |
||
102 | #endif |
||
103 | |||
104 | static INLINE struct nouveau_screen * |
||
105 | nouveau_screen(struct pipe_screen *pscreen) |
||
106 | { |
||
107 | return (struct nouveau_screen *)pscreen; |
||
108 | } |
||
109 | |||
110 | boolean |
||
111 | nouveau_screen_bo_get_handle(struct pipe_screen *pscreen, |
||
112 | struct nouveau_bo *bo, |
||
113 | unsigned stride, |
||
114 | struct winsys_handle *whandle); |
||
115 | struct nouveau_bo * |
||
116 | nouveau_screen_bo_from_handle(struct pipe_screen *pscreen, |
||
117 | struct winsys_handle *whandle, |
||
118 | unsigned *out_stride); |
||
119 | |||
120 | |||
121 | int nouveau_screen_init(struct nouveau_screen *, struct nouveau_device *); |
||
122 | void nouveau_screen_fini(struct nouveau_screen *); |
||
123 | |||
124 | void nouveau_screen_init_vdec(struct nouveau_screen *); |
||
125 | |||
126 | #endif> |