Ejemplo n.º 1
0
static void *
i915_drm_buffer_map(struct i915_winsys *iws,
                     struct i915_winsys_buffer *buffer,
                     boolean write)
{
   struct i915_drm_buffer *buf = i915_drm_buffer(buffer);
   drm_intel_bo *bo = intel_bo(buffer);
   int ret = 0;

   assert(bo);

   if (buf->map_count)
      goto out;

   ret = drm_intel_gem_bo_map_gtt(bo);

   buf->ptr = bo->virtual;

   assert(ret == 0);
out:
   if (ret)
      return NULL;

   buf->map_count++;
   return buf->ptr;
}
Ejemplo n.º 2
0
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; */
}
Ejemplo n.º 3
0
static void
i915_drm_buffer_unmap(struct i915_winsys *iws,
                       struct i915_winsys_buffer *buffer)
{
   struct i915_drm_buffer *buf = i915_drm_buffer(buffer);

   if (--buf->map_count)
      return;

   drm_intel_gem_bo_unmap_gtt(intel_bo(buffer));
}
Ejemplo n.º 4
0
static void
i915_drm_buffer_destroy(struct i915_winsys *iws,
                         struct i915_winsys_buffer *buffer)
{
   drm_intel_bo_unreference(intel_bo(buffer));

#ifdef DEBUG
   i915_drm_buffer(buffer)->magic = 0;
   i915_drm_buffer(buffer)->bo = NULL;
#endif

   FREE(buffer);
}