static DFBResult x11AllocateBuffer( CoreSurfacePool *pool, void *pool_data, void *pool_local, CoreSurfaceBuffer *buffer, CoreSurfaceAllocation *allocation, void *alloc_data ) { CoreSurface *surface; x11AllocationData *alloc = alloc_data; x11PoolLocalData *local = pool_local; DFBX11 *x11 = local->x11; D_DEBUG_AT( X11_Surfaces, "%s()\n", __FUNCTION__ ); D_MAGIC_ASSERT( pool, CoreSurfacePool ); D_MAGIC_ASSERT( buffer, CoreSurfaceBuffer ); surface = buffer->surface; D_MAGIC_ASSERT( surface, CoreSurface ); if (x11ImageInit( x11, &alloc->image, surface->config.size.w, surface->config.size.h, surface->config.format ) == DFB_OK) { alloc->real = true; alloc->pitch = alloc->image.pitch; allocation->size = surface->config.size.h * alloc->image.pitch; } else dfb_surface_calc_buffer_size( surface, 8, 2, &alloc->pitch, &allocation->size ); return DFB_OK; }
static DFBResult x11TestConfig( CoreSurfacePool *pool, void *pool_data, void *pool_local, CoreSurfaceBuffer *buffer, const CoreSurfaceConfig *config ) { x11PoolLocalData *local = pool_local; DFBX11 *x11 = local->x11; DFBX11Shared *shared = x11->shared; /* Provide a fallback only if no virtual physical pool is allocated... */ if (!shared->vpsmem_length) return DFB_OK; /* Pass NULL image for probing */ return x11ImageInit( x11, NULL, config->size.w, config->size.h, config->format ); }
static DFBResult x11AllocateBuffer( CoreSurfacePool *pool, void *pool_data, void *pool_local, CoreSurfaceBuffer *buffer, CoreSurfaceAllocation *allocation, void *alloc_data ) { CoreSurface *surface; x11AllocationData *alloc = alloc_data; x11PoolLocalData *local = pool_local; DFBX11 *x11 = local->x11; D_DEBUG_AT( X11_Surfaces, "%s()\n", __FUNCTION__ ); D_MAGIC_ASSERT( pool, CoreSurfacePool ); D_MAGIC_ASSERT( buffer, CoreSurfaceBuffer ); surface = buffer->surface; D_MAGIC_ASSERT( surface, CoreSurface ); dfb_surface_calc_buffer_size( surface, 8, 8, &alloc->pitch, &allocation->size ); if (buffer->type & CSTF_PREALLOCATED) { D_DEBUG_AT( X11_Surfaces, " -> preallocated from %p\n", buffer->config.preallocated[0].handle ); alloc->type = X11_ALLOC_PIXMAP; alloc->xid = (unsigned long) buffer->config.preallocated[0].handle; } else { if (x11ImageInit( x11, &alloc->image, surface->config.size.w, surface->config.size.h, surface->config.format ) == DFB_OK) { alloc->type = X11_ALLOC_IMAGE; alloc->pitch = alloc->image.pitch; allocation->size = surface->config.size.h * alloc->image.pitch; } else alloc->type = X11_ALLOC_SHM; } return DFB_OK; }