static void
xm_flush_frontbuffer(struct pipe_winsys *pws,
- struct pipe_surface *surf )
+ struct pipe_surface *surf,
+ void *context_private)
{
/* The Xlib driver's front color surfaces are actually X Windows so
* this flush is a no-op.
*/
}
-static void
-xm_wait_idle(struct pipe_winsys *pws)
-{
- /* no-op */
-}
static void
xm_printf(struct pipe_winsys *pws, const char *fmtString, ...)
static struct pipe_buffer_handle *
-xm_buffer_create(struct pipe_winsys *pws, unsigned alignment)
+xm_buffer_create(struct pipe_winsys *pws, unsigned flags)
{
struct xm_buffer *buffer = CALLOC_STRUCT(xm_buffer);
buffer->refcount = 1;
}
-static struct pipe_region *
-xm_region_alloc(struct pipe_winsys *winsys,
- unsigned cpp, unsigned width, unsigned height, unsigned flags)
-{
- struct pipe_region *region = CALLOC_STRUCT(pipe_region);
- const unsigned alignment = 64;
-
- region->cpp = cpp;
- region->pitch = round_up(width, alignment / cpp);
- region->height = height;
- region->refcount = 1;
-
- assert(region->pitch > 0);
-
- region->buffer = winsys->buffer_create( winsys, alignment )
-;
-
- /* NULL data --> just allocate the space */
- winsys->buffer_data( winsys,
- region->buffer,
- region->pitch * cpp * height,
- NULL,
- PIPE_BUFFER_USAGE_PIXEL );
- return region;
-}
-
-
-static void
-xm_region_release(struct pipe_winsys *winsys, struct pipe_region **region)
+static unsigned
+xm_surface_pitch(struct pipe_winsys *winsys, unsigned cpp, unsigned width,
+ unsigned flags)
{
- if (!*region)
- return;
-
- assert((*region)->refcount > 0);
- (*region)->refcount--;
-
- if ((*region)->refcount == 0) {
- assert((*region)->map_refcount == 0);
-
- winsys->buffer_reference( winsys, &((*region)->buffer), NULL );
- free(*region);
- }
- *region = NULL;
+ return round_up(width, 64 / cpp);
}
static void
-xm_surface_release(struct pipe_winsys *ws, struct pipe_surface **s)
+xm_surface_release(struct pipe_winsys *winsys, struct pipe_surface **s)
{
struct pipe_surface *surf = *s;
- if (surf->region)
- winsys->region_release(winsys, &surf->region);
- free(surf);
+ surf->refcount--;
+ if (surf->refcount == 0) {
+ if (surf->buffer)
+ winsys->buffer_reference(winsys, &surf->buffer, NULL);
+ free(surf);
+ }
*s = NULL;
}
ws->buffer_subdata = xm_buffer_subdata;
ws->buffer_get_subdata = xm_buffer_get_subdata;
- ws->region_alloc = xm_region_alloc;
- ws->region_release = xm_region_release;
-
+ ws->surface_pitch = xm_surface_pitch;
ws->surface_alloc = xm_surface_alloc;
ws->surface_release = xm_surface_release;
ws->flush_frontbuffer = xm_flush_frontbuffer;
- ws->wait_idle = xm_wait_idle;
ws->printf = xm_printf;
ws->get_name = xm_get_name;
}
case PIPE_FORMAT_S8_Z24:
case PIPE_FORMAT_U_S8:
case PIPE_FORMAT_U_Z16:
- /*case PIPE_FORMAT_U_Z32:*/
+ case PIPE_FORMAT_U_Z32:
return TRUE;
default:
return FALSE;