From 7fe60435bce6595a9c58a9bfd8244d74b5320e96 Mon Sep 17 00:00:00 2001 From: Benjamin Franzke Date: Tue, 15 Jan 2013 08:46:13 +0100 Subject: Import DirectFB141_2k11R3_beta5 --- Source/DirectFB/src/core/surface_pool.h | 272 ++++++++++++++++++++++++++++++++ 1 file changed, 272 insertions(+) create mode 100755 Source/DirectFB/src/core/surface_pool.h (limited to 'Source/DirectFB/src/core/surface_pool.h') diff --git a/Source/DirectFB/src/core/surface_pool.h b/Source/DirectFB/src/core/surface_pool.h new file mode 100755 index 0000000..fc049e0 --- /dev/null +++ b/Source/DirectFB/src/core/surface_pool.h @@ -0,0 +1,272 @@ +/* + (c) Copyright 2001-2009 The world wide DirectFB Open Source Community (directfb.org) + (c) Copyright 2000-2004 Convergence (integrated media) GmbH + + All rights reserved. + + Written by Denis Oliver Kropp , + Andreas Hundt , + Sven Neumann , + Ville Syrjälä and + Claudio Ciccani . + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ + +#ifndef __CORE__SURFACE_POOL_H__ +#define __CORE__SURFACE_POOL_H__ + +#include + +#include + +#include +#include + + +typedef enum { + CSPCAPS_NONE = 0x00000000, + + CSPCAPS_PHYSICAL = 0x00000001, /* pool provides physical address to buffer */ + CSPCAPS_VIRTUAL = 0x00000002, /* pool provides virtual address to buffer */ + + CSPCAPS_ALL = 0x00000003 +} CoreSurfacePoolCapabilities; + +typedef enum { + CSPP_DEFAULT, + CSPP_PREFERED, + CSPP_ULTIMATE +} CoreSurfacePoolPriority; + +/* + * Increase this number when changes result in binary incompatibility! + */ +#define DFB_SURFACE_POOL_ABI_VERSION 1 + +#define DFB_SURFACE_POOL_DESC_NAME_LENGTH 44 + + +typedef struct { + CoreSurfacePoolCapabilities caps; + CoreSurfaceAccessFlags access[_CSAID_NUM]; + CoreSurfaceTypeFlags types; + CoreSurfacePoolPriority priority; + char name[DFB_SURFACE_POOL_DESC_NAME_LENGTH]; + unsigned long size; +} CoreSurfacePoolDescription; + + +typedef struct { + int (*PoolDataSize)( void ); + int (*PoolLocalDataSize)( void ); + int (*AllocationDataSize)( void ); + + /* + * Pool init/destroy + */ + DFBResult (*InitPool) ( CoreDFB *core, + CoreSurfacePool *pool, + void *pool_data, + void *pool_local, + void *system_data, + CoreSurfacePoolDescription *ret_desc ); + + DFBResult (*JoinPool) ( CoreDFB *core, + CoreSurfacePool *pool, + void *pool_data, + void *pool_local, + void *system_data ); + + DFBResult (*DestroyPool)( CoreSurfacePool *pool, + void *pool_data, + void *pool_local ); + + DFBResult (*LeavePool) ( CoreSurfacePool *pool, + void *pool_data, + void *pool_local ); + + + + DFBResult (*TestConfig) ( CoreSurfacePool *pool, + void *pool_data, + void *pool_local, + CoreSurfaceBuffer *buffer, + const CoreSurfaceConfig *config ); + /* + * Buffer management + */ + DFBResult (*AllocateBuffer) ( CoreSurfacePool *pool, + void *pool_data, + void *pool_local, + CoreSurfaceBuffer *buffer, + CoreSurfaceAllocation *allocation, + void *alloc_data ); + + DFBResult (*DeallocateBuffer)( CoreSurfacePool *pool, + void *pool_data, + void *pool_local, + CoreSurfaceBuffer *buffer, + CoreSurfaceAllocation *allocation, + void *alloc_data ); + + /* + * Locking + */ + DFBResult (*Lock) ( CoreSurfacePool *pool, + void *pool_data, + void *pool_local, + CoreSurfaceAllocation *allocation, + void *alloc_data, + CoreSurfaceBufferLock *lock ); + + DFBResult (*Unlock)( CoreSurfacePool *pool, + void *pool_data, + void *pool_local, + CoreSurfaceAllocation *allocation, + void *alloc_data, + CoreSurfaceBufferLock *lock ); + + /* + * Read/write + */ + DFBResult (*Read) ( CoreSurfacePool *pool, + void *pool_data, + void *pool_local, + CoreSurfaceAllocation *allocation, + void *alloc_data, + void *destination, + int pitch, + const DFBRectangle *rect ); + + DFBResult (*Write) ( CoreSurfacePool *pool, + void *pool_data, + void *pool_local, + CoreSurfaceAllocation *allocation, + void *alloc_data, + const void *source, + int pitch, + const DFBRectangle *rect ); + + /* + * Muck out + */ + DFBResult (*MuckOut) ( CoreSurfacePool *pool, + void *pool_data, + void *pool_local, + CoreSurfaceBuffer *buffer ); +} SurfacePoolFuncs; + + +struct __DFB_CoreSurfacePool { + int magic; + + FusionSkirmish lock; + + CoreSurfacePoolID pool_id; + + CoreSurfacePoolDescription desc; + + int pool_data_size; + int pool_local_data_size; + int alloc_data_size; + + void *data; + + FusionVector allocs; + + FusionSHMPoolShared *shmpool; + + CoreSurfacePool *backup; +}; + + +typedef DFBEnumerationResult (*CoreSurfacePoolCallback)( CoreSurfacePool *pool, + void *ctx ); + +typedef DFBEnumerationResult (*CoreSurfaceAllocCallback)( CoreSurfaceAllocation *allocation, + void *ctx ); + + + +DFBResult dfb_surface_pools_negotiate( CoreSurfaceBuffer *buffer, + CoreSurfaceAccessorID accessor, + CoreSurfaceAccessFlags access, + CoreSurfacePool **ret_pools, + unsigned int max_pools, + unsigned int *ret_num ); + +DFBResult dfb_surface_pools_enumerate( CoreSurfacePoolCallback callback, + void *ctx ); + +DFBResult dfb_surface_pools_allocate ( CoreSurfaceBuffer *buffer, + CoreSurfaceAccessorID accessor, + CoreSurfaceAccessFlags access, + CoreSurfaceAllocation **ret_allocation ); + + +DFBResult dfb_surface_pool_initialize( CoreDFB *core, + const SurfacePoolFuncs *funcs, + CoreSurfacePool **ret_pool ); + +DFBResult dfb_surface_pool_join ( CoreDFB *core, + CoreSurfacePool *pool, + const SurfacePoolFuncs *funcs ); + +DFBResult dfb_surface_pool_destroy ( CoreSurfacePool *pool ); + +DFBResult dfb_surface_pool_leave ( CoreSurfacePool *pool ); + + + +DFBResult dfb_surface_pool_allocate ( CoreSurfacePool *pool, + CoreSurfaceBuffer *buffer, + CoreSurfaceAllocation **ret_allocation ); + +DFBResult dfb_surface_pool_deallocate( CoreSurfacePool *pool, + CoreSurfaceAllocation *allocation ); + +DFBResult dfb_surface_pool_displace ( CoreSurfacePool *pool, + CoreSurfaceBuffer *buffer, + CoreSurfaceAllocation **ret_allocation ); + +DFBResult dfb_surface_pool_lock ( CoreSurfacePool *pool, + CoreSurfaceAllocation *allocation, + CoreSurfaceBufferLock *lock ); + +DFBResult dfb_surface_pool_unlock ( CoreSurfacePool *pool, + CoreSurfaceAllocation *allocation, + CoreSurfaceBufferLock *lock ); + +DFBResult dfb_surface_pool_read ( CoreSurfacePool *pool, + CoreSurfaceAllocation *allocation, + void *data, + int pitch, + const DFBRectangle *rect ); + +DFBResult dfb_surface_pool_write ( CoreSurfacePool *pool, + CoreSurfaceAllocation *allocation, + const void *data, + int pitch, + const DFBRectangle *rect ); + +DFBResult dfb_surface_pool_enumerate ( CoreSurfacePool *pool, + CoreSurfaceAllocCallback callback, + void *ctx ); + + +#endif + -- cgit