2 #include "pipe/p_screen.h"
4 #include "softpipe/sp_winsys.h"
6 #include "intel_be_device.h"
7 #include "intel_be_context.h"
8 #include "intel_be_batchbuffer.h"
12 #include "intel_be_api.h"
14 static struct i915_batchbuffer
*
15 intel_be_batch_get(struct i915_winsys
*sws
)
17 struct intel_be_context
*intel
= intel_be_context(sws
);
18 return &intel
->batch
->base
;
22 intel_be_batch_reloc(struct i915_winsys
*sws
,
23 struct pipe_buffer
*buf
,
24 unsigned access_flags
,
27 struct intel_be_context
*intel
= intel_be_context(sws
);
28 drm_intel_bo
*bo
= intel_bo(buf
);
33 if (access_flags
& I915_BUFFER_ACCESS_WRITE
) {
34 write
= I915_GEM_DOMAIN_RENDER
;
35 read
= I915_GEM_DOMAIN_RENDER
;
38 if (access_flags
& I915_BUFFER_ACCESS_READ
) {
39 read
|= I915_GEM_DOMAIN_SAMPLER
;
42 ret
= intel_be_offset_relocation(intel
->batch
,
49 /* TODO change return type */
54 intel_be_batch_flush(struct i915_winsys
*sws
,
55 struct pipe_fence_handle
**fence
)
57 struct intel_be_context
*intel
= intel_be_context(sws
);
58 struct intel_be_fence
**f
= (struct intel_be_fence
**)fence
;
60 intel_be_batchbuffer_flush(intel
->batch
, f
);
69 intel_be_destroy_context(struct i915_winsys
*winsys
)
71 struct intel_be_context
*intel
= intel_be_context(winsys
);
73 intel_be_batchbuffer_free(intel
->batch
);
79 intel_be_init_context(struct intel_be_context
*intel
, struct intel_be_device
*device
)
83 intel
->device
= device
;
85 intel
->base
.batch_get
= intel_be_batch_get
;
86 intel
->base
.batch_reloc
= intel_be_batch_reloc
;
87 intel
->base
.batch_flush
= intel_be_batch_flush
;
89 intel
->base
.destroy
= intel_be_destroy_context
;
91 intel
->batch
= intel_be_batchbuffer_alloc(intel
);
97 intel_be_create_context(struct drm_api
*api
, struct pipe_screen
*screen
)
99 struct intel_be_context
*intel
;
100 struct pipe_context
*pipe
;
101 struct intel_be_device
*device
= intel_be_device(screen
->winsys
);
103 intel
= (struct intel_be_context
*)malloc(sizeof(*intel
));
104 memset(intel
, 0, sizeof(*intel
));
106 intel_be_init_context(intel
, device
);
108 if (device
->softpipe
)
109 pipe
= softpipe_create(screen
);
111 pipe
= i915_create_context(screen
, &device
->base
, &intel
->base
);