blob: 4fa20e0d7f67cffb74d793c706748494f947cd8e [file] [log] [blame]
/*
* Copyright (c) 2019-2021, 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 mos_context_next.h
//! \brief Container for parameters shared across different GPU contextNexts of the same device instance
//!
#ifndef __MOS_CONTEXT_NEXT_H__
#define __MOS_CONTEXT_NEXT_H__
#include "mos_os_next.h"
#include "mos_cmdbufmgr_next.h"
#include "mos_gpucontextmgr_next.h"
#include "mos_decompression.h"
#include "mos_mediacopy.h"
class OsContextNext
{
protected:
//!
//! \brief Constructor for the OsContextNext
//!
OsContextNext(){};
public:
//!
//! \brief Destructor for the OsContextNext
//!
virtual ~OsContextNext(){};
//!
//! \brief Initialzie the OS ContextNext Object
//! \return MOS_STATUS_SUCCESS on success case, MOS error status on fail cases
//!
virtual MOS_STATUS Init(DDI_DEVICE_CONTEXT osDriverContextNext) = 0;
//!
//! \brief Static entrypoint, get the OS ContextNext Object
//! \return the os specific object for OS contextNext
//!
static class OsContextNext *GetOsContextObject();
//!
//! \brief Clean up the smartptr
//!
void CleanUp();
//!
//! \brief Get the skuTable
//! \return The active SKU Table
//!
MEDIA_FEATURE_TABLE *GetSkuTable() { return &m_skuTable; };
//!
//! \brief Get the waTable
//! \return The active WA table
//!
MEDIA_WA_TABLE *GetWaTable() { return &m_waTable; };
//!
//! \brief Get the platform information string
//! \return value of m_platformInfo
//!
PLATFORM *GetPlatformInfo() { return &m_platformInfo; };
//!
//! \brief Get the gtSystemInfo string
//! \return value of m_gtSystemInfo
//!
MEDIA_SYSTEM_INFO *GetGtSysInfo() { return &m_gtSystemInfo; };
//!
//! \brief Check the platform is Atom or not
//! \return true on Atom platform, false on none Atom platform
//!
bool IsAtomSoc() { return m_isAtomSOC; };
//!
//! \brief Set the OS ContextNext valid flag
//! \param [in] isOsContextNextValid
//! Flag to indicate if the os contextNext is valid.
//!
void SetOsContextValid(bool isOsContextValid) { m_osContextValid = isOsContextValid; };
//!
//! \brief Return the OS ContextNext valid flag
//! \return true if the OS contextNext is valid, false if not valid
//!
bool GetOsContextValid() { return m_osContextValid; };
//!
//! \brief Get GPU context manager of the device
//! \return GPU context manager
//!
GpuContextMgrNext *GetGpuContextMgr() { return m_gpuContextMgr; }
//!
//! \brief Get Cmd buffer manager of the device
//! \return Cmd buffer manager
//!
CmdBufMgrNext *GetCmdBufferMgr() { return m_cmdBufMgr; }
//!
//! \brief Get GMM client context of the device
//! \return Cmd buffer manager
//!
GMM_CLIENT_CONTEXT *GetGmmClientContext() { return m_gmmClientContext; }
//!
//! \brief Get MosDecompression
//! \return ptr to MosDecompression
//!
MosDecompression *GetMosDecompression()
{
return m_mosDecompression;
}
//!
//! \brief Get MosMediaCopy
//! \return ptr to MosMediaCopy
//!
MosMediaCopy *GetMosMediaCopy()
{
return m_mosMediaCopy;
}
//! \brief Get the DumpFrameNum
//! \return The current dumped frameNum
//!
uint32_t GetDumpFrameNum() { return m_dumpframeNum; }
//!
//! \brief Set the DumpFrameNum
//! \return update the FrameNum and return success
//!
MOS_STATUS SetDumpFrameNum(uint32_t framNum)
{
m_dumpframeNum = framNum;
return MOS_STATUS_SUCCESS;
}
//!
//! \brief Reset the DumpFrameNum
//! \return init the FrameNum and return success
//!
MOS_STATUS ResetDumpFrameNum()
{
m_dumpframeNum = 0xffffffff;
return MOS_STATUS_SUCCESS;
}
//!
//! \brief Get the dumpLoc
//! \return The current dumped GetdumpLoc
//!
char *GetdumpLoc() { return m_dumpLoc; }
//!
//! \brief Reset the dumpLoc
//! \return init the dumpLoc and return success
//!
MOS_STATUS ResetdumpLoc()
{
m_dumpLoc[0] = 0;
return MOS_STATUS_SUCCESS;
}
//!
//! \brief Determine whether the device is using async mode
//! \return true if the device is in async mode, false otherwise
//!
bool IsAynchronous() { return m_aynchronousDevice; }
protected:
//!
//! \brief Destory the OS ContextNext Object, internal function, called by cleanup
//!
virtual void Destroy() = 0;
public:
static const uint32_t m_cmdBufAlignment = 16; //!> Cmd buffer alignment
protected:
GpuContextMgrNext *m_gpuContextMgr = nullptr; //!> GPU context manager of the device
CmdBufMgrNext *m_cmdBufMgr = nullptr; //!> Cmd buffer manager of the device
GMM_CLIENT_CONTEXT *m_gmmClientContext = nullptr; //!> GMM client context of the device
uint32_t m_dumpframeNum = 0; // For use when dump its compressed surface, override the frame number given from MediaVeboxDecompState
char m_dumpLoc[MAX_PATH] = {0}; // For use when dump its compressed surface, to distinguish each loc's pre/post decomp
//! \brief Platform string including product family, chipset family, etc
PLATFORM m_platformInfo = {};
//! \brief sku table
MEDIA_FEATURE_TABLE m_skuTable = {};
//! \brief wa table
MEDIA_WA_TABLE m_waTable = {};
//! \brief GT system information, like EU counter, thread count, etc.
MEDIA_SYSTEM_INFO m_gtSystemInfo = {};
//! \brief Whether the processor is Atom
bool m_isAtomSOC = false;
//! \brief Flag to mark whether the os context is valid
bool m_osContextValid = false;
//! \brief Whether the current driver is of 64 bit
bool m_64bit = false;
//! \brief Whether or not need deallocation on exit
bool m_deallocateOnExit = false;
//! \brief need KMD to track the media frame or not
bool m_enableKmdMediaFrameTracking = false;
//! \brief For Resource addressing, whether patch list mode is active
bool m_usesPatchList = false;
//! \brief For Resource addressing, whether GPU address mode is active
bool m_usesGfxAddress = false;
//! \brief Component info
MOS_COMPONENT m_component = COMPONENT_UNKNOWN;
//! \brief Flag to indicate if Tile64 is supported
bool m_mediaTile64 = false;
//! \brief Flag to indicate if NoGfxMemory is needed
bool m_noGfxMemoryNeeded = false;
//! \brief the ptr to mos decompression module
MosDecompression *m_mosDecompression = nullptr;
//! \brief the ptr to mos media copy module
MosMediaCopy *m_mosMediaCopy = nullptr;
//!< Indicate if this device is working in aync mode or normal mode
bool m_aynchronousDevice = false;
};
#endif // #ifndef __MOS_CONTEXTNext_NEXT_H__