#ifndef INTEL_BE_BATCHBUFFER_H
#define INTEL_BE_BATCHBUFFER_H

#include "i915simple/i915_batch.h"

#include "drm.h"
#include "intel_bufmgr.h"

#define BATCH_RESERVED 16

#define INTEL_DEFAULT_RELOCS 100
#define INTEL_MAX_RELOCS 400

#define INTEL_BATCH_NO_CLIPRECTS 0x1
#define INTEL_BATCH_CLIPRECTS    0x2

struct intel_be_context;
struct intel_be_device;
struct intel_be_fence;

struct intel_be_batchbuffer
{
	struct i915_batchbuffer base;

	struct intel_be_context *intel;
	struct intel_be_device *device;

	drm_intel_bo *bo;
};

struct intel_be_batchbuffer *
intel_be_batchbuffer_alloc(struct intel_be_context *intel);

void
intel_be_batchbuffer_free(struct intel_be_batchbuffer *batch);

void
intel_be_batchbuffer_finish(struct intel_be_batchbuffer *batch);

void
intel_be_batchbuffer_flush(struct intel_be_batchbuffer *batch,
			   struct intel_be_fence **fence);

void
intel_be_batchbuffer_reset(struct intel_be_batchbuffer *batch);

int
intel_be_offset_relocation(struct intel_be_batchbuffer *batch,
			   unsigned pre_add,
			   drm_intel_bo *bo,
			   uint32_t read_domains,
			   uint32_t write_doman);

#endif