3 * Authors: Jakob Bornecrantz <jakob-at-tungstengraphics.com>
6 #include "ws_dri_fencemgr.h"
7 #include "intel_be_device.h"
8 #include "intel_be_context.h"
9 #include "intel_be_batchbuffer.h"
11 static INLINE
struct intel_be_context
*
12 intel_be_context(struct i915_winsys
*sws
)
14 return (struct intel_be_context
*)sws
;
17 /* Simple batchbuffer interface:
20 static struct i915_batchbuffer
*
21 intel_i915_batch_get(struct i915_winsys
*sws
)
23 struct intel_be_context
*intel
= intel_be_context(sws
);
24 return &intel
->batch
->base
;
27 static void intel_i915_batch_reloc(struct i915_winsys
*sws
,
28 struct pipe_buffer
*buf
,
29 unsigned access_flags
,
32 struct intel_be_context
*intel
= intel_be_context(sws
);
34 unsigned flags
= DRM_BO_FLAG_MEM_TT
;
35 unsigned mask
= DRM_BO_MASK_MEM
;
37 if (access_flags
& I915_BUFFER_ACCESS_WRITE
) {
38 flags
|= DRM_BO_FLAG_WRITE
;
39 mask
|= DRM_BO_FLAG_WRITE
;
42 if (access_flags
& I915_BUFFER_ACCESS_READ
) {
43 flags
|= DRM_BO_FLAG_READ
;
44 mask
|= DRM_BO_FLAG_READ
;
47 intel_be_offset_relocation(intel
->batch
,
54 static void intel_i915_batch_flush(struct i915_winsys
*sws
,
55 struct pipe_fence_handle
**fence
)
57 struct intel_be_context
*intel
= intel_be_context(sws
);
60 struct _DriFenceObject
*dri
;
61 struct pipe_fence_handle
*pipe
;
67 fu
.dri
= intel_be_batchbuffer_flush(intel
->batch
);
79 driFenceUnReference(&fu
.dri
);
85 intel_be_init_context(struct intel_be_context
*intel
, struct intel_be_device
*device
)
90 intel
->device
= device
;
92 /* TODO move framebuffer createion to the driver */
94 intel
->base
.batch_get
= intel_i915_batch_get
;
95 intel
->base
.batch_reloc
= intel_i915_batch_reloc
;
96 intel
->base
.batch_flush
= intel_i915_batch_flush
;
98 intel
->batch
= intel_be_batchbuffer_alloc(intel
);
104 intel_be_destroy_context(struct intel_be_context
*intel
)
106 intel_be_batchbuffer_free(intel
->batch
);