static void * vmw_gmr_buffer_map(struct pb_buffer *_buf, unsigned flags) { struct vmw_gmr_buffer *buf = vmw_gmr_buffer(_buf); return buf->map; }
static void vmw_gmr_buffer_destroy(struct pb_buffer *_buf) { struct vmw_gmr_buffer *buf = vmw_gmr_buffer(_buf); vmw_ioctl_region_unmap(buf->region); vmw_ioctl_region_destroy(buf->region); FREE(buf); }
static void vmw_gmr_buffer_fence( struct pb_buffer *_buf, struct pipe_fence_handle *fence ) { /* We don't need to do anything, as the pipebuffer library * will take care of delaying the destruction of fenced buffers */ #ifdef DEBUG struct vmw_gmr_buffer *buf = vmw_gmr_buffer(_buf); if(fence) buf->last_fence = fence; #endif }
static void vmw_gmr_buffer_destroy(struct pb_buffer *_buf) { struct vmw_gmr_buffer *buf = vmw_gmr_buffer(_buf); #ifdef DEBUG if(buf->last_fence) { struct svga_winsys_screen *sws = &buf->mgr->vws->base; assert(sws->fence_signalled(sws, buf->last_fence, 0) == 0); } #endif vmw_ioctl_region_unmap(buf->region); vmw_ioctl_region_destroy(buf->region); FREE(buf); }
boolean vmw_gmr_bufmgr_region_ptr(struct pb_buffer *buf, struct SVGAGuestPtr *ptr) { struct pb_buffer *base_buf; unsigned offset = 0; struct vmw_gmr_buffer *gmr_buf; pb_get_base_buffer( buf, &base_buf, &offset ); gmr_buf = vmw_gmr_buffer(base_buf); if(!gmr_buf) return FALSE; *ptr = vmw_ioctl_region_ptr(gmr_buf->region); ptr->offset += offset; return TRUE; }