blob: 092f34e315748fb05b9b09a59d309354d60422ab [file] [log] [blame]
/*
* Copyright (c) 2017, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef CMRTLIB_LINUX_HARDWARE_CM_SURFACE_MANAGER_H_
#define CMRTLIB_LINUX_HARDWARE_CM_SURFACE_MANAGER_H_
#include "cm_def_os.h"
#include "cm_include.h"
class CmDevice_RT;
class CmSurface2D;
class CmSurface2DUP;
class CmSurface3D;
class CmBuffer;
class CmBufferUP;
class CmBufferSVM;
class CmBufferStateless;
class CmSurfaceManager
{
public:
CmSurfaceManager(CmDevice_RT *device);
~CmSurfaceManager();
int32_t CreateSurface2D(uint32_t width,
uint32_t height,
CM_SURFACE_FORMAT format,
CmSurface2D* &surface);
int32_t CreateSurface2D(VASurfaceID *vaSurface, CmSurface2D *&surface);
int32_t CreateSurface2D(VASurfaceID *vaSurface,
uint32_t firstArraySlice,
uint32_t mipSlice,
CmSurface2D *&surface);
int32_t DestroySurface(CmSurface2D* &surface);
int32_t CreateBuffer(uint32_t size, CmBuffer* &buffer);
int32_t CreateBufferUP(uint32_t size,
void *sysMem,
CmBufferUP* &buffer);
int32_t DestroyBuffer(CmBuffer *&buffer);
int32_t DestroyBufferUP(CmBufferUP *&buffer);
int32_t CreateSurface2DUP(uint32_t width,
uint32_t height,
CM_SURFACE_FORMAT format,
void *sysMem,
CmSurface2DUP* &surface);
int32_t DestroySurface2DUP(CmSurface2DUP* &surface);
int32_t CreateSurface3D(uint32_t width,
uint32_t height,
uint32_t depth,
CM_SURFACE_FORMAT format,
CmSurface3D *&surface);
int32_t DestroySurface3D(CmSurface3D *&surface);
int32_t CreateBufferSVM(uint32_t size,
void* &sysMem,
uint32_t accessFlag,
CmBufferSVM* &buffer);
int32_t DestroyBufferSVM(CmBufferSVM* &buffer);
int32_t CreateVaSurface2D(uint32_t width,
uint32_t height,
CM_SURFACE_FORMAT format,
VASurfaceID &vaSurface,
CmSurface2D* &surface);
int32_t CreateSurface2D(VASurfaceID vaSurface, CmSurface2D* &surface);
int32_t CreateSurface2D(VASurfaceID *vaSurfaceArray,
const uint32_t surfaceCount,
CmSurface2D **surfaceArray);
int32_t CreateBufferStateless(size_t size,
uint32_t option,
void *sysMem,
CmBufferStateless *&buffer);
int32_t DestroyBufferStateless(CmBufferStateless *&buffer);
protected:
int32_t CreateSurface2D(VASurfaceID &vaSurface,
bool cmCreated,
bool createdByLibva,
CmSurface2D* &surface);
int32_t ConvertToLibvaFormat(int32_t format);
int32_t AllocateSurface2DInUmd(uint32_t width,
uint32_t height,
CM_SURFACE_FORMAT format,
bool cmCreated,
bool createdByLibva,
VASurfaceID vaSurface,
CmSurface2D* &surface);
int32_t Surface2DSanityCheck(uint32_t width,
uint32_t height,
CM_SURFACE_FORMAT format);
int32_t DestroySurface2DInUmd(CmSurface2D* &surface);
private:
CmDevice_RT *m_device;
private:
CmSurfaceManager(const CmSurfaceManager &other);
CmSurfaceManager &operator=(const CmSurfaceManager &other);
};
#endif // #ifndef CMRTLIB_LINUX_HARDWARE_CM_SURFACE_MANAGER_H_