Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5361 | serge | 1 | #ifndef _INTEL_BATCHBUFFER_H_ |
2 | #define _INTEL_BATCHBUFFER_H_ |
||
3 | |||
4 | #include |
||
5 | #include |
||
6 | #include |
||
7 | #include |
||
8 | |||
9 | #include "intel_driver.h" |
||
10 | |||
11 | struct intel_batchbuffer |
||
12 | { |
||
13 | struct intel_driver_data *intel; |
||
14 | dri_bo *buffer; |
||
15 | unsigned int size; |
||
16 | unsigned char *map; |
||
17 | unsigned char *ptr; |
||
18 | int atomic; |
||
19 | int flag; |
||
20 | |||
21 | int emit_total; |
||
22 | unsigned char *emit_start; |
||
23 | |||
24 | int (*run)(drm_intel_bo *bo, int used, |
||
25 | drm_clip_rect_t *cliprects, int num_cliprects, |
||
26 | int DR4, unsigned int ring_flag); |
||
27 | |||
28 | /* Used for Sandybdrige workaround */ |
||
29 | dri_bo *wa_render_bo; |
||
30 | }; |
||
31 | |||
32 | struct intel_batchbuffer *intel_batchbuffer_new(struct intel_driver_data *intel, int flag, int buffer_size); |
||
33 | void intel_batchbuffer_free(struct intel_batchbuffer *batch); |
||
34 | void intel_batchbuffer_start_atomic(struct intel_batchbuffer *batch, unsigned int size); |
||
35 | void intel_batchbuffer_start_atomic_bcs(struct intel_batchbuffer *batch, unsigned int size); |
||
36 | void intel_batchbuffer_start_atomic_blt(struct intel_batchbuffer *batch, unsigned int size); |
||
37 | void intel_batchbuffer_start_atomic_veb(struct intel_batchbuffer *batch, unsigned int size); |
||
38 | void intel_batchbuffer_end_atomic(struct intel_batchbuffer *batch); |
||
39 | void intel_batchbuffer_emit_dword(struct intel_batchbuffer *batch, unsigned int x); |
||
40 | void intel_batchbuffer_emit_reloc(struct intel_batchbuffer *batch, dri_bo *bo, |
||
41 | uint32_t read_domains, uint32_t write_domains, |
||
42 | uint32_t delta); |
||
43 | void intel_batchbuffer_require_space(struct intel_batchbuffer *batch, unsigned int size); |
||
44 | void intel_batchbuffer_data(struct intel_batchbuffer *batch, void *data, unsigned int size); |
||
45 | void intel_batchbuffer_emit_mi_flush(struct intel_batchbuffer *batch); |
||
46 | void intel_batchbuffer_flush(struct intel_batchbuffer *batch); |
||
47 | void intel_batchbuffer_begin_batch(struct intel_batchbuffer *batch, int total); |
||
48 | void intel_batchbuffer_advance_batch(struct intel_batchbuffer *batch); |
||
49 | void intel_batchbuffer_check_batchbuffer_flag(struct intel_batchbuffer *batch, int flag); |
||
50 | int intel_batchbuffer_check_free_space(struct intel_batchbuffer *batch, int size); |
||
51 | int intel_batchbuffer_used_size(struct intel_batchbuffer *batch); |
||
52 | void intel_batchbuffer_align(struct intel_batchbuffer *batch, unsigned int alignedment); |
||
53 | |||
54 | #define __BEGIN_BATCH(batch, n, f) do { \ |
||
55 | assert(f == batch->flag); \ |
||
56 | intel_batchbuffer_check_batchbuffer_flag(batch, f); \ |
||
57 | intel_batchbuffer_require_space(batch, (n) * 4); \ |
||
58 | intel_batchbuffer_begin_batch(batch, (n)); \ |
||
59 | } while (0) |
||
60 | |||
61 | #define __OUT_BATCH(batch, d) do { \ |
||
62 | intel_batchbuffer_emit_dword(batch, d); \ |
||
63 | } while (0) |
||
64 | |||
65 | #define __OUT_RELOC(batch, bo, read_domains, write_domain, delta) do { \ |
||
66 | assert((delta) >= 0); \ |
||
67 | intel_batchbuffer_emit_reloc(batch, bo, \ |
||
68 | read_domains, write_domain, \ |
||
69 | delta); \ |
||
70 | } while (0) |
||
71 | |||
72 | #define __ADVANCE_BATCH(batch) do { \ |
||
73 | intel_batchbuffer_advance_batch(batch); \ |
||
74 | } while (0) |
||
75 | |||
76 | #define BEGIN_BATCH(batch, n) __BEGIN_BATCH(batch, n, I915_EXEC_RENDER) |
||
77 | #define BEGIN_BLT_BATCH(batch, n) __BEGIN_BATCH(batch, n, I915_EXEC_BLT) |
||
78 | #define BEGIN_BCS_BATCH(batch, n) __BEGIN_BATCH(batch, n, I915_EXEC_BSD) |
||
79 | #define BEGIN_VEB_BATCH(batch, n) __BEGIN_BATCH(batch, n, I915_EXEC_VEBOX) |
||
80 | |||
81 | #define OUT_BATCH(batch, d) __OUT_BATCH(batch, d) |
||
82 | #define OUT_BLT_BATCH(batch, d) __OUT_BATCH(batch, d) |
||
83 | #define OUT_BCS_BATCH(batch, d) __OUT_BATCH(batch, d) |
||
84 | #define OUT_VEB_BATCH(batch, d) __OUT_BATCH(batch, d) |
||
85 | |||
86 | #define OUT_RELOC(batch, bo, read_domains, write_domain, delta) \ |
||
87 | __OUT_RELOC(batch, bo, read_domains, write_domain, delta) |
||
88 | #define OUT_BLT_RELOC(batch, bo, read_domains, write_domain, delta) \ |
||
89 | __OUT_RELOC(batch, bo, read_domains, write_domain, delta) |
||
90 | #define OUT_BCS_RELOC(batch, bo, read_domains, write_domain, delta) \ |
||
91 | __OUT_RELOC(batch, bo, read_domains, write_domain, delta) |
||
92 | |||
93 | #define ADVANCE_BATCH(batch) __ADVANCE_BATCH(batch) |
||
94 | #define ADVANCE_BLT_BATCH(batch) __ADVANCE_BATCH(batch) |
||
95 | #define ADVANCE_BCS_BATCH(batch) __ADVANCE_BATCH(batch) |
||
96 | #define ADVANCE_VEB_BATCH(batch) __ADVANCE_BATCH(batch) |
||
97 | |||
98 | #endif /* _INTEL_BATCHBUFFER_H_ */ |