Browse Source

i915: Added a intel be function to wrap a drm bo handle

tags/mesa_20090313
Jakob Bornecrantz 17 years ago
parent
commit
c6d6a57424

+ 33
- 0
src/gallium/winsys/common/intel_drm/intel_be_device.c View File

@@ -125,6 +125,37 @@ intel_be_user_buffer_create(struct pipe_winsys *winsys, void *ptr, unsigned byte
return &buffer->base;
}

struct pipe_buffer *
intel_be_buffer_from_handle(struct intel_be_device *device,
const char* name, unsigned handle)
{
struct intel_be_buffer *be_buf = malloc(sizeof(*be_buf));
struct pipe_buffer *buffer;

if (!be_buf)
goto err;

memset(be_buf, 0, sizeof(*be_buf));

driGenBuffers(device->staticPool, name, 1, &be_buf->driBO, 0, 0, 0);
driBOSetReferenced(be_buf->driBO, handle);

if (0) /** XXX TODO check error */
goto err_bo;
buffer = &be_buf->base;
buffer->refcount = 1;
buffer->alignment = 0;
buffer->usage = 0;
buffer->size = driBOSize(be_buf->driBO);

return buffer;
err_bo:
free(be_buf);
err:
return NULL;
}


/*
* Surface functions.
@@ -157,6 +188,7 @@ intel_i915_surface_release(struct pipe_winsys *winsys, struct pipe_surface **s)
assert((size_t)"intel_i915_surface_release is deprecated" & 0);
}


/*
* Fence functions
*/
@@ -189,6 +221,7 @@ intel_be_fence_finish( struct pipe_winsys *sws,
return driFenceFinish((struct _DriFenceObject *)fence, flag, 0);
}


/*
* Misc functions
*/

+ 11
- 2
src/gallium/winsys/common/intel_drm/intel_be_device.h View File

@@ -48,14 +48,23 @@ struct intel_be_buffer {
struct _DriBufferObject *driBO;
};

/**
* Create a be buffer from a drm bo handle
*
* Takes a reference
*/
struct pipe_buffer *
intel_be_buffer_from_handle(struct intel_be_device *device,
const char* name, unsigned handle);

static INLINE struct intel_be_buffer *
intel_be_buffer( struct pipe_buffer *buf )
intel_be_buffer(struct pipe_buffer *buf)
{
return (struct intel_be_buffer *)buf;
}

static INLINE struct _DriBufferObject *
dri_bo( struct pipe_buffer *buf )
dri_bo(struct pipe_buffer *buf)
{
return intel_be_buffer(buf)->driBO;
}

+ 8
- 14
src/gallium/winsys/dri/intel/intel_screen.c View File

@@ -49,28 +49,22 @@ intelCreateSurface(struct intel_screen *intelScreen, struct pipe_winsys *winsys,
static void
intelCreateSurface(struct intel_screen *intelScreen, struct pipe_winsys *winsys, unsigned handle)
{
struct intel_be_buffer *be_buf = malloc(sizeof(*be_buf));
struct pipe_screen *screen = intelScreen->base.screen;
struct pipe_texture *texture;
struct pipe_texture templat;
struct pipe_surface *surface;
struct pipe_buffer *buffer = &be_buf->base;
struct pipe_buffer *buffer;
unsigned pitch;

assert(intelScreen->front.cpp == 4);

/* XXX create a intel_be function for this */
{
driGenBuffers(intelScreen->base.staticPool, "front", 1, &intelScreen->front.buffer, 0, 0, 0);
driBOSetReferenced(intelScreen->front.buffer, handle);

memset(be_buf, 0, sizeof(*be_buf));
buffer->refcount = 1;
buffer->alignment = 0;
buffer->usage = 0;
buffer->size = driBOSize(intelScreen->front.buffer);
be_buf->driBO = intelScreen->front.buffer;
}
buffer = intel_be_buffer_from_handle(&intelScreen->base,
"front", handle);

if (!buffer)
return;

intelScreen->front.buffer = dri_bo(buffer);

memset(&templat, 0, sizeof(templat));
templat.tex_usage |= PIPE_TEXTURE_USAGE_DISPLAY_TARGET;

Loading…
Cancel
Save