#include "intel_be_device.h" #include "intel_be_context.h" #include "intel_be_batchbuffer.h" #include "i915_drm.h" static struct i915_batchbuffer * intel_be_batch_get(struct i915_winsys *sws) { struct intel_be_context *intel = intel_be_context(sws); return &intel->batch->base; } static void intel_be_batch_reloc(struct i915_winsys *sws, struct pipe_buffer *buf, unsigned access_flags, unsigned delta) { struct intel_be_context *intel = intel_be_context(sws); drm_intel_bo *bo = intel_bo(buf); int ret; uint32_t read = 0; uint32_t write = 0; if (access_flags & I915_BUFFER_ACCESS_WRITE) { write = I915_GEM_DOMAIN_RENDER; read = I915_GEM_DOMAIN_RENDER; } if (access_flags & I915_BUFFER_ACCESS_READ) { read |= I915_GEM_DOMAIN_VERTEX; } ret = intel_be_offset_relocation(intel->batch, delta, bo, read, write); assert(ret == 0); /* TODO change return type */ /* return ret; */ } static void intel_be_batch_flush(struct i915_winsys *sws, struct pipe_fence_handle **fence) { struct intel_be_context *intel = intel_be_context(sws); struct intel_be_fence **f = (struct intel_be_fence **)fence; if (fence && *fence) assert(0); intel_be_batchbuffer_flush(intel->batch, f); } boolean intel_be_init_context(struct intel_be_context *intel, struct intel_be_device *device) { assert(intel); assert(device); intel->device = device; intel->base.batch_get = intel_be_batch_get; intel->base.batch_reloc = intel_be_batch_reloc; intel->base.batch_flush = intel_be_batch_flush; intel->batch = intel_be_batchbuffer_alloc(intel); return true; } void intel_be_destroy_context(struct intel_be_context *intel) { intel_be_batchbuffer_free(intel->batch); }