1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
/*
* 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.
*/
//!
//! \file cm_surface_3d.h
//! \brief Contains CmSurface3D declarations.
//!
#ifndef MEDIADRIVER_AGNOSTIC_COMMON_CM_CMSURFACE3D_H_
#define MEDIADRIVER_AGNOSTIC_COMMON_CM_CMSURFACE3D_H_
#include "cm_def.h"
namespace CMRT_UMD
{
class CmEvent;
//! \brief CmSurface3D class to manage 3D surface in video memory.
//! \details CmSurface3D represents a 3D surface in video memory. Each
//! CmSurface3D object is associated with a SurfaceIndex object
//! containing a unique index value the surface is mapped to when
//! created by the CmDevice. The CmDevice keeps the mapping b/w
//! index and CmSurface3D. The SurfaceIndex is passed to CM kernel
//! function as argument to indicate the surface.
class CmSurface3D
{
public:
//! \brief This function returns the SurfaceIndex object associated
//! with the surface.
//! \param [out] index
//! Reference to the pointer to the SurfaceIndex.
//! \returns Always returns CM_SUCCESS.
CM_RT_API virtual int32_t GetIndex(SurfaceIndex* &index) = 0;
//! \brief Copy the surface content to system memory.
//! \details The size of data copied is the size of data in surface. It is
//! the caller's responsibility to allocate the system memory.
//! This is a blocking function, i.e. the function will not
//! return until the copy operation is completed. Surface
//! reading will not happen until the status of the dependent
//! event becomes CM_STATUS_FINISHED. It is application's
//! responsibility to make sure no other task enqueued after
//! the task corresponding to the dependent task but before
//! ReadSurface. If sysMemSize is given, it will be checked
//! against the size needed for the surface.
//! \param [in] sysMem
//! pointer to the target system memory.
//! \param [in] event
//! pointer to the dependent event. See also CmEvent.
//! \param [in] sysMemSize
//! size of the system memory. Default value is -1 which means
//! no memory size checking.
//! \retval CM_SUCCESS if the copy is successful.
//! \retval CM_INVALID_ARG_VALUE if sysMem is nullptr or the sysMemSize
//! is less than total size of CmSurface3D.
//! \retval CM_LOCK_SURFACE_FAIL if surface locking is failed.
//! \retval CM_EXCEED_MAX_TIMEOUT if the dependent task times out.
//! \retval CM_FAILURE otherwise.
CM_RT_API virtual int32_t
ReadSurface(unsigned char *sysMem,
CmEvent *event,
uint64_t sysMemSize = 0xFFFFFFFFFFFFFFFFULL) = 0;
//! \brief Copy system memory content to surface.
//! \details The size of data copied is the size of data in surface. It is the
//! caller's responsibility to allocate the system memory. This
//! is a blocking function, i.e. the function will not return
//! until the copy operation is completed. Surface writing will
//! not happen until the status of the dependent event becomes
//! CM_STATUS_FINISHED. The dependent event for WriteSurface is
//! usually NULL. If sysMemSize is given, it will be checked
//! against the size needed for the surface.
//! \param [in] sysMem
//! pointer to the source system memory.
//! \param [in] event
//! pointer to the dependent event. See also CmEvent.
//! \param [in] sysMemSize
//! size of the system memory. The default value is -1, which
//! means no memory size checking.
//! \retval CM_SUCCESS if the copy is successful.
//! \retval CM_INVALID_ARG_VALUE if sysMem is nullptr or the sysMemSize
//! is less than total size of CmSurface3D.
//! \retval CM_LOCK_SURFACE_FAIL if surface locking is failed.
//! \retval CM_EXCEED_MAX_TIMEOUT if the dependent task times out.
//! \retval CM_FAILURE otherwise.
CM_RT_API virtual int32_t
WriteSurface(const unsigned char *sysMem,
CmEvent *event,
uint64_t sysMemSize = 0xFFFFFFFFFFFFFFFFULL) = 0;
//! \brief Set memory in surface to initValue.
//! \details The size of data initialized is the size of data in the surface. This
//! is a blocking function, i.e. the function will not return
//! until the memset operation is completed. Surface
//! initialization will not happen until the status of the
//! dependent event becomes CM_STATUS_FINISHED. The dependent
//! event for InitSurface is usually NULL.
//! \param [in] initValue
//! 4-byte value used to initilize the memory.
//! \param [in] event
//! pointer to the dependent event. See also CmEvent.
//! \retval CM_SUCCESS if the copy is successful.
//! \retval CM_LOCK_SURFACE_FAIL if surface locking is failed.
//! \retval CM_FAILURE otherwise.
CM_RT_API virtual int32_t InitSurface(const uint32_t initValue,
CmEvent *event) = 0;
//! \brief Selects one of the pre-defined memory object control
//! settings for this surface.
//! \param [in] memCtrl
//! the selected pre-defined memory object control setting.
//! See also MEMORY_OBJECT_CONTROL.
//! \retval CM_SUCCESS if the copy is successful.
//! \retval CM_FAILURE otherwise.
//! \note This API is platform related, and only for SKL and plus platforms.
CM_RT_API virtual int32_t
SelectMemoryObjectControlSetting(MEMORY_OBJECT_CONTROL memCtrl) = 0;
};
};//namespace
#endif // #ifndef MEDIADRIVER_AGNOSTIC_COMMON_CM_CMSURFACE3D_H_
|