- ws->flush_frontbuffer = xm_flush_frontbuffer;
- ws->wait_idle = xm_wait_idle;
- ws->printf = xm_printf;
- ws->get_name = xm_get_name;
+ if (!ws) {
+ ws = CALLOC_STRUCT(pipe_winsys);
+
+ /* Fill in this struct with callbacks that pipe will need to
+ * communicate with the window system, buffer manager, etc.
+ */
+ ws->buffer_create = xm_buffer_create;
+ ws->user_buffer_create = xm_user_buffer_create;
+ ws->buffer_map = xm_buffer_map;
+ ws->buffer_unmap = xm_buffer_unmap;
+ ws->buffer_reference = xm_buffer_reference;
+ ws->buffer_data = xm_buffer_data;
+ 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_alloc = xm_surface_alloc;
+
+ ws->flush_frontbuffer = xm_flush_frontbuffer;
+ ws->wait_idle = xm_wait_idle;
+ ws->printf = xm_printf;
+ ws->get_name = xm_get_name;
+ }