
#ifndef INTEL_DRM_WINSYS_H
#define INTEL_DRM_WINSYS_H

#include "i915/i915_batchbuffer.h"

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


/*
 * Winsys
 */


struct i915_drm_winsys
{
   struct i915_winsys base;

   boolean dump_cmd;
   const char *dump_raw_file;
   boolean send_cmd;

   int fd; /**< Drm file discriptor */

   size_t max_batch_size;

   drm_intel_bufmgr *gem_manager;
};

static INLINE struct i915_drm_winsys *
i915_drm_winsys(struct i915_winsys *iws)
{
   return (struct i915_drm_winsys *)iws;
}

struct pipe_fence_handle * i915_drm_fence_create(drm_intel_bo *bo);

void i915_drm_winsys_init_batchbuffer_functions(struct i915_drm_winsys *idws);
void i915_drm_winsys_init_buffer_functions(struct i915_drm_winsys *idws);
void i915_drm_winsys_init_fence_functions(struct i915_drm_winsys *idws);


/*
 * Buffer
 */


struct i915_drm_buffer {
   unsigned magic;

   drm_intel_bo *bo;

   void *ptr;
   unsigned map_count;

   boolean flinked;
   unsigned flink;
};

static INLINE struct i915_drm_buffer *
i915_drm_buffer(struct i915_winsys_buffer *buffer)
{
   return (struct i915_drm_buffer *)buffer;
}

static INLINE drm_intel_bo *
intel_bo(struct i915_winsys_buffer *buffer)
{
   return i915_drm_buffer(buffer)->bo;
}

#endif
