blob: 4c6006d6535a55b1e02035999be9e4c8b9c0d5a9 [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.
*/
//!
//! \file cm_hal_generic.h
//! \brief Main Entry point for CM HAL Generic component
//!
#ifndef MEDIADRIVER_AGNOSTIC_COMMON_CM_CMHALGENERIC_H_
#define MEDIADRIVER_AGNOSTIC_COMMON_CM_CMHALGENERIC_H_
#include "cm_def.h"
typedef struct CM_HAL_GENERIC * PCM_HAL_GENERIC;
typedef struct _CM_HAL_SAMPLER_8X8_PARAM *PCM_HAL_SAMPLER_8X8_PARAM;
typedef struct CmHalL3Settings * PCmHalL3Settings;
//-------------------------------
//| CM HW platform info
//-------------------------------
struct CM_PLATFORM_INFO
{
uint32_t numSlices;
uint32_t numSubSlices;
uint32_t numEUsPerSubSlice;
uint32_t numHWThreadsPerEU;
uint32_t numMaxEUsPerPool;
};
typedef CM_PLATFORM_INFO *PCM_PLATFORM_INFO;
struct CM_HAL_WALKER_XY
{
union
{
struct
{
uint32_t x : 16;
uint32_t y : 16;
};
uint32_t value;
};
};
typedef CM_HAL_WALKER_XY *PCM_HAL_WALKER_XY;
// The following enum type must match
// MHW_WALKER_MODE defined in mhw_render.h
enum CM_HAL_WALKER_MODE
{
CM_HAL_WALKER_MODE_NOT_SET = -1,
CM_HAL_WALKER_MODE_DISABLED = 0,
CM_HAL_WALKER_MODE_SINGLE = 1, // dual = 0, repel = 1
CM_HAL_WALKER_MODE_DUAL = 2, // dual = 1, repel = 0)
CM_HAL_WALKER_MODE_TRI = 3, // applies in BDW GT2 which has 1 slice and 3 sampler/VME per slice
CM_HAL_WALKER_MODE_QUAD = 4, // applies in HSW GT3 which has 2 slices and 2 sampler/VME per slice
CM_HAL_WALKER_MODE_HEX = 6, // applies in BDW GT2 which has 2 slices and 3 sampler/VME per slice
CM_HAL_WALKER_MODE_OCT = 8 // may apply in future Gen media architectures
};
// The following structure must match the structure
// MHW_WALKER_PARAMS defined in mhw_render.h
struct CM_HAL_WALKER_PARAMS
{
uint32_t interfaceDescriptorOffset : 5;
uint32_t cmWalkerEnable : 1;
uint32_t colorCountMinusOne : 8;
uint32_t useScoreboard : 1;
uint32_t scoreboardMask : 8;
uint32_t midLoopUnitX : 2;
uint32_t midLoopUnitY : 2;
uint32_t middleLoopExtraSteps : 5;
uint32_t groupIdLoopSelect : 24;
uint32_t : 8;
uint32_t inlineDataLength;
uint8_t *inlineData;
uint32_t localLoopExecCount;
uint32_t globalLoopExecCount;
CM_HAL_WALKER_MODE walkerMode;
CM_HAL_WALKER_XY blockResolution;
CM_HAL_WALKER_XY localStart;
CM_HAL_WALKER_XY localEnd;
CM_HAL_WALKER_XY localOutLoopStride;
CM_HAL_WALKER_XY localInnerLoopUnit;
CM_HAL_WALKER_XY globalResolution;
CM_HAL_WALKER_XY globalStart;
CM_HAL_WALKER_XY globalOutlerLoopStride;
CM_HAL_WALKER_XY globalInnerLoopUnit;
bool addMediaFlush;
bool requestSingleSlice;
};
typedef CM_HAL_WALKER_PARAMS *PCM_HAL_WALKER_PARAMS;
struct SamplerParam
{
unsigned int samplerTableIndex;
unsigned int heapOffset;
unsigned int bti;
unsigned int btiStepping;
unsigned int btiMultiplier;
bool userDefinedBti;
bool regularBti;
unsigned int elementType;
unsigned int size;
};
struct CM_SURFACE_BTI_INFO
{
uint32_t normalSurfaceStart; // start index of normal surface
uint32_t normalSurfaceEnd; // end index of normal surface
uint32_t reservedSurfaceStart; // start index of reserved surface
uint32_t reservedSurfaceEnd; // end index of reserved surface
};
typedef CM_SURFACE_BTI_INFO *PCM_SURFACE_BTI_INFO;
//------------------------------------------------------------------------------
//| CM HW Expected GT system info
//------------------------------------------------------------------------------
struct CM_EXPECTED_GT_SYSTEM_INFO
{
uint32_t numSlices;
uint32_t numSubSlices;
};
typedef CM_EXPECTED_GT_SYSTEM_INFO *PCM_EXPECTED_GT_SYSTEM_INFO;
struct CM_HAL_GENERIC
{
#define ASSIGN_IF_VALID(ptr, value) \
if (ptr) \
{ \
*ptr = value; \
}
public:
PCM_HAL_STATE m_cmState;
const L3ConfigRegisterValues *m_l3Plane = nullptr;
size_t m_l3ConfigCount = 0;
CM_HAL_GENERIC(PCM_HAL_STATE cmState) : m_cmState(cmState),
m_platformID(PLATFORM_INTEL_UNKNOWN),
m_genGT(PLATFORM_INTEL_GT_UNKNOWN),
m_platformStr(nullptr),
m_requestShutdownSubslicesForVmeUsage(false),
m_overridePowerOptionPerGpuContext(false),
m_redirectRcsToCcs(false),
m_decompress(false),
m_fastpathDefault(false),
m_defaultMocs(MOS_CM_RESOURCE_USAGE_SurfaceState){};
virtual ~CM_HAL_GENERIC(){};
//!
//! \brief Get GPUCopy Kernel's ISA and Size
//! \details Get GPUCopy Kernel's ISA and Size
//! \param [out] isa
//! pointer to memory of gpucopy isa
//! \param [out] isaSize
//! size of gpucopy isa
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
//!
virtual MOS_STATUS GetCopyKernelIsa(void *&isa, uint32_t &isaSize) = 0;
//!
//! \brief Get GPU Surface Initialization Kernel's ISA and Size
//! \details Get GPU Surface Initialization Kernel's ISA and Size
//! \param [out] isa
//! pointer to memory of gpu initialization isa
//! \param [out] isaSize
//! size of gpu initialization isa
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
//!
virtual MOS_STATUS GetInitKernelIsa(void *&isa, uint32_t &isaSize) = 0;
//!
//! \brief Set media walker parameters
//! \details Set media walker parameters
//! \param [in] engineeringParams
//! engineering params passed by caller
//! \param [in] walkerParams
//! pointer to walker paramaeters to set
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
//!
virtual MOS_STATUS SetMediaWalkerParams(
CM_WALKING_PARAMETERS engineeringParams,
PCM_HAL_WALKER_PARAMS walkerParams) = 0;
//!
//! \brief Set Surface Memory Object Control
//! \details Convert Memory Object Control bits to RenderHal Surface State
//! \param [in] memObjCtl
//! memObjCtl passed by caller
//! \param [in] surfStateParams
//! pointer to surface state param
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
//!
virtual MOS_STATUS HwSetSurfaceMemoryObjectControl(
uint16_t memObjCtl,
PRENDERHAL_SURFACE_STATE_PARAMS surfStateParams) = 0;
//!
//! \brief Register Sampler8x8
//! \details Register Sampler8x8
//! \param [in] param
//! pointer to cmhal sampler8x8 param
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
//!
virtual MOS_STATUS RegisterSampler8x8(
PCM_HAL_SAMPLER_8X8_PARAM param) = 0;
//!
//! \brief Submit commmand to kernel mode driver
//! \details Submit commmand to kernel mode driver
//! \param [in] batchBuffer
//! pointer to mhw batch buffer to submit
//! \param [in] taskId
//! id of task
//! \param [in] kernelParam
//! pointer to array of kernel param
//! \param [out] cmdBuffer
//! pointer cmd buffer returned to cm event
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
//!
virtual MOS_STATUS SubmitCommands(
PMHW_BATCH_BUFFER batchBuffer,
int32_t taskId,
PCM_HAL_KERNEL_PARAM *kernelParam,
void ** cmdBuffer) = 0;
#if (_RELEASE_INTERNAL || _DEBUG)
#if defined(CM_DIRECT_GUC_SUPPORT)
//!
//! \brief Submit dummy commmand to kernel mode driver to set up page table for Direct submission
//! \details Submit commmand to kernel mode driver
//! \param [in] pBatchBuffer
//! pointer to mhw batch buffer to submit
//! \param [in] iTaskId
//! id of task
//! \param [out] ppCmdBuffer
//! pointer cmd buffer returned to cm event
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
//!
virtual MOS_STATUS SubmitDummyCommands(
PMHW_BATCH_BUFFER batchBuffer,
int32_t taskId,
PCM_HAL_KERNEL_PARAM *kernelParam,
void ** cmdBuffer) = 0;
#endif
#endif
//!
//! \brief Submit a commmand to get the time stamp base
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
//!
virtual MOS_STATUS SubmitTimeStampBaseCommands()
{
return MOS_STATUS_SUCCESS;
}
//!
//! \brief Update platform information from power option
//! \details Power option can be used to do slice shutdown. This function is
//! to adjust platform info (EU numbers/Slice number) accordingly.
//! \param [in] platformInfo
//! pointer to platform info
//! \param [in] euSaturated
//! if EU Saturation required.
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
//!
virtual MOS_STATUS UpdatePlatformInfoFromPower(
PCM_PLATFORM_INFO platformInfo,
bool euSaturated) = 0;
//!
//! \brief Get media walker's max width
//! \details Get media walker's max width
//! \return media walker's max width
//!
virtual uint32_t GetMediaWalkerMaxThreadWidth() = 0;
//!
//! \brief Get media walker's max height
//! \details Get media walker's max height
//! \return media walker's max height
//!
virtual uint32_t GetMediaWalkerMaxThreadHeight() = 0;
//!
//! \brief Get Surface binding table index info
//! \details Get Surface binding table index info, including the start/end index of
//! reserved surfaces and normal surfaces
//! \param [in] btiInfo
//! pointer to binding table information
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
virtual MOS_STATUS GetHwSurfaceBTIInfo(
PCM_SURFACE_BTI_INFO btiInfo) = 0;
//!
//! \brief Set Suggested L3 Configuration to RenderHal
//! \details Set Suggested L3 Configuration to RenderHal
//! \param [in] l3Config
//! index of selected configuration
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
virtual MOS_STATUS SetSuggestedL3Conf(
L3_SUGGEST_CONFIG l3Config) = 0;
//!
//! \brief Allocate SIP/CSR Resource for Preemption and Debug
//! \details Allocate SIP/CSR Resource for Preemption and Debug
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
virtual MOS_STATUS AllocateSIPCSRResource() = 0;
//!
//! \brief Get the stepping string of Gen platform
//! \details Get the stepping string of Gen platform
//! \param [in,out] stepInfoStr
//! reference to stepping information string
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
virtual MOS_STATUS GetGenStepInfo(char *&stepInfoStr) = 0;
//!
//! \brief Get the platform code and GT type of Gen platform
//! \param [out] platformID
//! pointer to the platform code defined in GPU_PLATFORM
//! \param [out] gengt
//! pointer to the GT type defined in GPU_GT_PLATFORM
//! \param [out] platformStr
//! pointer to platform string
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
virtual MOS_STATUS GetGenPlatformInfo(uint32_t *platformID,
uint32_t * genGT,
const char ** platformStr)
{
ASSIGN_IF_VALID(platformID, m_platformID);
ASSIGN_IF_VALID(genGT, m_genGT);
ASSIGN_IF_VALID(platformStr, m_platformStr);
return MOS_STATUS_SUCCESS;
}
//!
//! \brief set the platform code and GT type of Gen platform
//! \param [in] platformID
//! the platform code defined in GPU_PLATFORM
//! \param [in] gengt
//! the GT type defined in GPU_GT_PLATFORM
//! \param [in] platformStr
//! platform string
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
virtual MOS_STATUS SetGenPlatformInfo(uint32_t platformID,
uint32_t genGT,
const char * platformStr)
{
m_platformID = platformID;
m_genGT = genGT;
m_platformStr = platformStr;
return MOS_STATUS_SUCCESS;
}
//!
//! \brief enable or disable the slice downdown feature
//! \param [in] enabled
//! true: enable slice shutdown; false: disable slice shutdown
virtual void SetRequestShutdownSubslicesForVmeUsage(bool enabled)
{
m_requestShutdownSubslicesForVmeUsage = enabled;
}
//!
//! \brief return whether the slice downdown feature is enabled
//! \return bool
//! true: slice shutdown enabled; false: slice shutdown disabled
virtual bool IsRequestShutdownSubslicesForVmeUsage()
{
return m_requestShutdownSubslicesForVmeUsage;
}
//!
//! \brief check if the CISA Gen ID is supported on the platform
//! \param [in] cisaGenID
//! the CISA ID that will be checked
//! \return bool
//! true if it is supported; false if not
virtual bool IsCisaIDSupported(uint32_t cisaGenID)
{
for (uint32_t id : m_cisaGenIDs)
{
if (id == cisaGenID)
{
return true;
}
}
return false;
}
//!
//! \brief add the supported CISA Gen IDs of this product
//! \param [in] cisaGenIDs
//! pointer to the vector of supported cisaGenIDs
//! \param [in] len
//! length of the vector of supported cisaGenIDs
//! \return MOS_STATUS
//! always return MOS_STATUS_SUCCESS
virtual MOS_STATUS AddSupportedCisaIDs(uint32_t *cisaGenIDs, int len = 1)
{
for (int i = 0; i < len; i++)
{
m_cisaGenIDs.push_back(cisaGenIDs[i]);
}
return MOS_STATUS_SUCCESS;
}
//!
//! \brief Check if Qpitch is supported by hw in surface 3d lock
//! \details Check if Qpitch is supported by hw in surface 3d lock
//! Qpitch is supported from SKL
//! \return True for SKL+
virtual bool IsSurf3DQpitchSupportedbyHw() { return true; };
//!
//! \brief Check if compare mask supported by hw in conditional buffer
//! \details Check if compare mask supported by hw in conditional buffer
//! compare mask is supported from SKL
//! \return True for SKL+
virtual bool IsCompareMaskSupportedbyHw() { return true; };
//!
//! \brief Check if two adjacent sampler index requried by hardware
//! \details Check if two adjacent sampler index requried by hardware
//! compare mask is supported from SKL
//! \return True for BDW, and False for SKL+
virtual bool IsAdjacentSamplerIndexRequiredbyHw() { return false; };
//!
//! \brief Check if the WA to disable surface compression required
//! \details Check if the WA to disable surface compression required
//! \return False for BDW, and True for SKL+
virtual bool IsSurfaceCompressionWARequired() { return true; };
//!
//! \brief Check if scoreboading parameters are supported.
//! \details Check if scoreboading parameters are supported.
//! \return False for Not needed, and True for Needed
virtual bool IsScoreboardParamNeeded() { return true; };
//!
//! \brief Check if surface color format is supported by VME
//! \return true if format is supported by VME surface
virtual bool IsSupportedVMESurfaceFormat(MOS_FORMAT format)
{
if (format != Format_NV12)
return false;
else
return true;
}
//!
//! \brief Sanity check for ColorCount.
//! \details Sanity check for ColorCount.
//! ColorCountMinusOne varies from 4 bit to 8 bit on different platforms
//! \return Result of the operation.
virtual int32_t ColorCountSanityCheck(uint32_t colorCount) = 0;
//!
//! \brief Sanity check for memory object control policy.
//! \details Sanity check for memory object control policy.
//! Each platform supports different control policy.
//! \param [in] memCtrl
//! input of memory object control to check
//! \return Result of the operation.
virtual bool MemoryObjectCtrlPolicyCheck(uint32_t memCtrl) = 0;
//!
//! \brief Check if the WA to use No cache setting for GPUCopy surface required
//! \details Check if the WA to use No cache setting for GPUCopy surface required
//! Configure memory object control for the two BufferUP to solve the same
//! cache-line coherency issue.
//! \return False for BDW, and True for SKL+
virtual bool IsGPUCopySurfaceNoCacheWARequired() { return true; };
//!
//! \brief Check if one plane P010 surface is supported.
//! \details Check if one plane P010 surface is supported.
//! one plane P010 surface is supported since CNL.
//! \return False for pre-CNL, and True for CNL+
virtual bool IsP010SinglePassSupported() { return true; };
//!
//! \brief Get Convolution Sampler Index.
//! \details Get Convolution Sampler Index.
//! \param [in] samplerParam
//! pointer to sampler param
//! \param [in] samplerIndexTable
//! pointer to sampler index table
//! \param [in] nSamp8X8Num
//! number of sampler8x8
//! \param [in] nSampConvNum
//! number of conv sampler
//! \return Sampler index.
virtual int32_t GetConvSamplerIndex(
PMHW_SAMPLER_STATE_PARAM samplerParam,
char * samplerIndexTable,
int32_t nSamp8X8Num,
int32_t nSampConvNum) = 0;
//!
//! \brief Set L3 values in CM hal layer.
//! \details Use the L3 struct to set L3 to different platforms.
//! \param [in] values
//! pointer to input L3 config values
//! \param [in] cmHalL3Setting
//! pointer to hal layer L3 config values
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
virtual MOS_STATUS SetL3CacheConfig(
const L3ConfigRegisterValues *values,
PCmHalL3Settings cmHalL3Setting) = 0;
//!
//! \brief Get sampler element count for a given sampler type.
//! \details Convert the sampler type to how many element for this sampler
//! type for current platform.
//! \param [in] mhwSamplerParam
//! pointer to the sampler param defined by MHW
//! \param [in,out] samplerParam
//! Will get sampler size, sampler element type, sampler bti
//! stepping and sampler multiplier for this type of sampler
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
virtual MOS_STATUS GetSamplerParamInfoForSamplerType(
PMHW_SAMPLER_STATE_PARAM mhwSamplerParam,
SamplerParam & samplerParam) = 0;
//!
//! \brief Get the expected configuration for specific GT
//! \details Get the expected configuration for specific GT
//! \param [in] expectedConfig
//! pointer to expected config
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
//!
virtual MOS_STATUS GetExpectedGtSystemConfig(
PCM_EXPECTED_GT_SYSTEM_INFO expectedConfig) = 0;
//!
//! \brief Get the size of the timestamp resource for each task
//! \details Get the size of the timestamp resource for each task
//! \return int32_t
//! Size of the timestamp resource for each task
//!
virtual int32_t GetTimeStampResourceSize()
{
// Default: 2 QWORDs for each kernel in the task + 1 QWORD for frame tracking
return (sizeof(uint64_t) * CM_SYNC_QWORD_PER_TASK) + (sizeof(uint64_t) * CM_TRACKER_ID_QWORD_PER_TASK);
}
//!
//! \brief Covnert the ticks to nano seconds with default config if KMD querying failed
//! \param [in] ticks
//! input ticks
//! \return uint64_t
//! Nano seconds converted from the input ticks
//!
virtual uint64_t ConverTicksToNanoSecondsDefault(uint64_t ticks) = 0;
//!
//! \brief Check if the platform has media mode or not
//! \details Check if the platform has media mode or not
//! \return bool
//! true: the platform has media mode; false the platform
//! does not have media mode.
//!
virtual bool CheckMediaModeAvailability() { return true; }
//!
//! \brief enable or disable the power option per GPU context
//! \param [in] enabled
//! true: enable per GPU context; false: disable per Batch command
virtual void SetOverridePowerOptionPerGpuContext(bool enabled)
{
m_overridePowerOptionPerGpuContext = enabled;
}
//!
//! \brief return whether the power option per GPU context is enabled
//! \return bool
//! true: enable per GPU context; false: disable per Batch command
virtual bool IsOverridePowerOptionPerGpuContext()
{
return m_overridePowerOptionPerGpuContext;
}
//!
//! \brief enable or disable redirect of RCS to CCS
//! \param [in] enabled
//! true: enable redirect of RCS to CCS; false: disable redirect of RCS to CCS
virtual void SetRedirectRcsToCcs(bool enabled)
{
m_redirectRcsToCcs = enabled;
}
//!
//! \brief return whether need redirect RCS to CCS
//! \return bool
//! true: redirect is need; false: don't need redirect
virtual bool IsRedirectRcsToCcs()
{
return m_redirectRcsToCcs;
}
//!
//! \brief enable or disable decompression flag
//! \param [in] enabled
//! true: enable decompression for surface;
//! false: disable decompression
virtual void SetDecompressFlag(bool enabled)
{
m_decompress = enabled;
}
//!
//! \brief return whether the decompreesion option
//! \return bool
//! true: need to decompress a compressed surface;
//! false: no need to decompress the compressed surface
virtual bool GetDecompressFlag()
{
return m_decompress;
}
virtual MOS_STATUS RegisterResourceBeforeLock(PMOS_INTERFACE pOsInterface, PMOS_RESOURCE pResource)
{
return MOS_STATUS_SUCCESS;
}
//!
//! \brief Init the default value of task related property
//! \param [in,out] taskConfig
//! Task related property
//! \return MOS_STATUS_SUCCESS
//!
virtual MOS_STATUS InitTaskProperty(CM_TASK_CONFIG &taskConfig)
{
return MOS_STATUS_SUCCESS;
}
//!
//! \brief Whether switch to fast path by default
//! \return true or false
//!
virtual void SetFastPathByDefault(bool flag)
{
m_fastpathDefault = flag;
}
//!
//! \brief Whether switch to fast path by default
//! \return true or false
//!
virtual bool IsFastPathByDefault()
{
return m_fastpathDefault;
}
//! \brief Get the smallest max thread number that can be set in VFE
//! \return the smallest max thread number
//!
virtual uint32_t GetSmallestMaxThreadNum()
{
return 1;
}
//!
//! \brief Set the default MOCS for this platform
//! \return void
//!
inline void SetDefaultMOCS(MOS_HW_RESOURCE_DEF mocs)
{
m_defaultMocs = mocs;
}
//!
//! \brief Get the default MOCS for this platform
//! \return the default MOCS
//!
inline MOS_HW_RESOURCE_DEF GetDefaultMOCS()
{
return m_defaultMocs;
}
//! \brief Check whether compressed output is needed
//! \return true if compression format is needed
//!
virtual bool SupportCompressedOutput()
{
return false;
}
//! \brief Check whether separate scratch space is needed
//! \return true if separate scratch is needed
//!
virtual bool IsSeparateScratch()
{
return false;
}
protected:
uint32_t m_platformID;
uint32_t m_genGT;
const char * m_platformStr;
std::vector<uint32_t> m_cisaGenIDs;
bool m_requestShutdownSubslicesForVmeUsage;
bool m_overridePowerOptionPerGpuContext;
bool m_redirectRcsToCcs;
bool m_decompress;
bool m_fastpathDefault;
MOS_HW_RESOURCE_DEF m_defaultMocs;
};
#endif // #ifndef MEDIADRIVER_AGNOSTIC_COMMON_CM_CMHALGENERIC_H_